首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Collider2D.OnTriggerEnter2D未触发

Collider2D.OnTriggerEnter2D未触发
EN

Stack Overflow用户
提问于 2019-05-16 19:19:40
回答 3查看 76关注 0票数 2

我给我的敌人分配了一个向玩家射击的投射物,这个投射物有一个我标记为触发器的collider2d。它似乎不能识别我的播放器对撞机。子弹就会穿过我的播放器。

代码语言:javascript
复制
void OnTriggerEnter2d (Collider2D other)
{
    Player _player = other.GetComponent<Player>();

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

    Destroy(gameObject);
}

我的播放器组件:

EN

回答 3

Stack Overflow用户

发布于 2019-05-16 21:48:37

你的方法名中有一个小的拼写错误。"2d“中的"d”需要大写。

onTriggerEnter2d -> onTriggerEnter2D

代码语言:javascript
复制
void OnTriggerEnter2D (Collider2D other)
{
    Player _player = other.GetComponent<Player>();

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

    Destroy(gameObject);
}
票数 1
EN

Stack Overflow用户

发布于 2019-05-16 19:33:00

在看不到你的代码的情况下,我会假设你的“player”对象没有附加Rigidbody2D

我强烈建议您阅读关于对撞机的docs以及它们是如何相互作用的,但作为一个非常简短的摘要;为了在两个对象之间发生碰撞,至少其中一个对象必须附加了RigidbodyRigidbody2D

Rigidbody2D组件附加到您的播放器(您可能希望将其标记为运动学,以便碰撞不会影响其位置/旋转等)。然后它应该会像你所期望的那样工作。

票数 0
EN

Stack Overflow用户

发布于 2019-05-16 20:31:48

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

代码语言:javascript
复制
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播放器中添加了组件的图像。为项目符号添加相同的内容,或者至少检查以下两件事:

  • 项目符号也在Z=0的位置
  • 项目符号有一个collider2D,其isTrigger功能为true (选中),以检测播放器。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56167358

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档