如何计算Unity 5中平台/对象的长度?

时间:2015-12-29 05:10:36

标签: unity3d 2d collision collider

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

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

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

2 个答案:

答案 0 :(得分:0)

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

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

Tags and Layers

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

Collision Matrix

你的预制件看起来像,

Platform

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

答案 1 :(得分:0)

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