0

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

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

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

4

2 回答 2

0

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

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

标签和图层

为敌人和敌人碰撞器创建图层并转到编辑 -> 项目设置 -> Physics2D。将碰撞矩阵设置为 EnemyCollider 只会与敌人发生碰撞。

碰撞矩阵

你的预制件看起来像,

平台

我希望这会对你有所帮助。

于 2015-12-29T08:31:28.283 回答
0

您可以使用Physics2D.Raycastto “感知” 上的碰撞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 应该击中的图层,以便它可以忽略敌人本身并避免自我碰撞。

于 2015-12-29T14:41:59.470 回答