Unity 5中如何计算platform/object的长度?

How to calculate the length of platform/object in Unity 5?

我是 Unity 的新手,在观看和阅读了一些教程之后,我现在正在尝试制作一款简单的 2D 平台类游戏。在上述游戏中,敌人和玩家都可以跳到不同的平台并像旧的 SnowBros 游戏一样穿越它。

我面临的问题与对敌人的移动进行编程有关。在我的游戏中会有几种类型的敌人,但现在一般有两种类型,一种可以从平台上跳下来,一种只能走到平台的长度,等待 1 秒然后翻转并向后走;这意味着他们不会离开平台。现在这是我遇到的问题。我似乎无法找到一种方法来计算底层当前平台的长度。我想过使用 collider.bound.min.x 和 max.x 来解决这个问题,但问题是我似乎无法找到一种简单的方法来访问当前平台的碰撞器而不获取脚本然后通过它.

因为会有许多不同大小的平台,并且每个平台都由其他平台的预制件组成,使用平台脚本然后遍历它似乎不是一个可行的解决方案。

好吧,我希望你有平台的预制件,并在这些预制件中将对撞机放在起点和终点。您可以指定层和标签,以便只有敌人可以检测到这些碰撞器,然后您可以从敌人脚本中检测碰撞标签并进行操作。

首先通过打开编辑 -> 项目设置 -> 标签和图层来创建图层。创建两个图层

为 enemy 和 enemyColliders 创建图层,然后转到编辑 -> 项目设置 -> Physics2D。将碰撞矩阵设置为 EnemyCollider 将仅与敌人碰撞。

你的预制件看起来像,

希望对您有所帮助。

您可以使用 Physics2D.Raycast 到 "sense" 在 Ray 上进行碰撞。想象一下,敌人把脚尖向前迈出一步,感觉是否还有坚实的地面,然后决定是否停下来。

void Update()
{
    Vector2 newPosition = transform.position + velocity * Time.deltaTime;
    Vector2 downwardDirection = Vector2.down;  // you may have to replace this with your downward direction if you have a different one

    RaycastHit2D hit = Physics2D.Raycast(newPosition, downwardDirection);
    if (hit.collider != null)
    {
        // solid ground detected

        transform.position = newPosition;
    }
    else
    {
        // no ground detected. Do something else...
    }
}

你可以而且应该定义你的 Raycast 应该击中的层,这样它就可以忽略敌人本身并避免 self-collision。