Collider2D.OnTriggerEnter2D不触发

时间:2019-05-16 11:19:40

标签: c# unity3d

我给敌人分配了一个弹丸,该弹丸向玩家射击,并且这个弹丸具有collider2d,我将其标记为触发器。而且似乎无法识别我的玩家对撞机。子弹刚穿过我的玩家。

void OnTriggerEnter2d (Collider2D other)
{
    Player _player = other.GetComponent<Player>();

    if (_player != null)
        _player.ChangeHealth(1);

    Destroy(gameObject);
}

我的播放器组件:

enter image description here

3 个答案:

答案 0 :(得分:1)

您的方法名称中有一个小的错字。 “ 2d”中的“ d”必须大写。

onTriggerEnter2d ---> onTriggerEnter2D

void OnTriggerEnter2D (Collider2D other)
{
    Player _player = other.GetComponent<Player>();

    if (_player != null)
        _player.ChangeHealth(1);

    Destroy(gameObject);
}

答案 1 :(得分:0)

在没有看到您的代码的情况下,我将假设您的“玩家”对象没有附加Rigidbody2D

我强烈建议您阅读docs上的对撞机以及它们之间的交互方式,但要非常简短。为了使两个对象之间发生碰撞,它们中至少有一个必须附着有RigidbodyRigidbody2D

Rigidbody2D组件附加到播放器(您可能希望将其标记为运动学的,因此碰撞不会影响它的位置/旋转等),然后它将按预期工作。

答案 2 :(得分:0)

我会将您在OnTriggerEnter2D中的代码更改为此:

void OnTriggerEnter2D (Collider2D other)
{
    // In your scene you have just two objects, so not really required now
    // may be interesting for you when you have more objects there
    if(other.gameObject.CompareTag("Player"))
    {
        //Here add .gameObject to refer the GameObject which contains the collider2D
        Player _player = other.gameObject.GetComponent<Player>();

        if (_player != null)
            _player.ChangeHealth(1);

        Destroy(gameObject);
    }
}

除此之外。您已在GameObject Player中添加了组件的图像。为子弹添加相同的内容,或者至少检查以下两项:

  • 子弹也位于Z = 0的位置
  • 子弹具有collider2D,具有 isTrigger 功能, true(选中)以检测播放器。