当我与游戏对象发生碰撞时,如何检查它的标签?

问题描述 投票:0回答:2

我的代码是:

    private void OnCollisionEnter(Collision collision)
    {
        if(collision.gameObject.CompareTag ("bullet"))
        {
            UI.lives--;
        }
        if (collision.gameObject.tag == "life")
        {
            UI.livePart++;
        }
    }

我尝试了两种不同的方法来使其工作,但实际上都无法正常工作。 对于最上面的一个,当我的玩家对象第一次与带有“子弹”标签的游戏对象碰撞时,它应该将我的“生命”整数减少 1。

对于第二个,当它第一次与带有标签“life”的游戏对象碰撞时,它应该将另一个整数“livePart”加1。

UI 是存储变量“lives”和“livePart”的代码。

c# unity-game-engine variables tags collision
2个回答
0
投票

需要检查的一件事是文档提到

注意:仅当其中一个碰撞器还附加有非运动学刚体时才会发送碰撞事件。

如果您碰巧在检查器中的 RigidBody 下选中了“Is Kinematic”,那么您将不会收到碰撞事件。

此外,以防万一这是新信息,将调试器附加到脚本中(如此处所示)确实很有帮助。例如,您可以在

OnCollisionEnter
函数中设置断点来验证它是否被调用。


0
投票

如果所有对象都有足够大小的碰撞器并且仍然没有发生碰撞。确保您的对象也具有 RigidBody 组件。正如@Matt Brown 所说,确保“Is Kinematic”切换框设置为关闭。

© www.soinside.com 2019 - 2024. All rights reserved.