Unity OnTriggerEnter2D 未注册

Posted

技术标签:

【中文标题】Unity OnTriggerEnter2D 未注册【英文标题】:Unity OnTriggerEnter2D not registering 【发布时间】:2020-08-20 09:52:55 【问题描述】:

我是使用 unity 的新手,在注册触发冲突时遇到了真正的问题。

public void  OnTriggerEnter2D(Collider2D other)

    print("collide");
    if (other.CompareTag("Fish"))
    
        print("Caught");
    

我在这两个项目上都有 2D 多边形对撞机和刚体。我也有 1 组触发器(尝试将两者都作为触发器)。然而,一个 UI 项是精灵,另一个是图像。 这两个项目也都标有“鱼”

非常感谢任何帮助。 谢谢

【问题讨论】:

欢迎来到 SO。请不要使用代码截图。 【参考方案1】:

我能想到有四件事需要发生,以便OnTriggerEnter 被调用:

    这两个对象的碰撞器实际上需要重叠。仅仅因为它们的渲染像素是重叠的,并不意味着它们的碰撞器是重叠的。这可以在编辑器中检查。它们的碰撞器在Scene 选项卡中用绿色轮廓表示。如果您没有看到任何内容,请确保标记为 Gizmos 的按钮已打开。

    这两个对象需要位于设置为相互碰撞的物理层中。你可以在Edit > Settings > Physics2D > Layer Collision Matrix查看这个。

    两个对象都需要附加 Rigidbody2D 组件。确保这些不是刚体组件,因为它们是用于 3D 物理的。

    包含OnTriggerEnter2D 事件的对象需要有isTrigger = true

【讨论】:

【参考方案2】:

我已经尝试了几件事。 首先,我检查了另一篇文章的建议。 简而言之:

    检查我是否至少有一个物体的刚体 检查层 检查标签 使用“is trigger”播放。

最后,解决方案是通过创建和添加组件按钮向对象添加脚本,而不是将编写的脚本拖放到对象中。不知道,但对我来说这是解决方案。即使是相同的脚本。

【讨论】:

【参考方案3】:

Sprite 和 Image 都可以与另一个 Image 发生碰撞。可能有问题的是您的精灵可能看起来像是在触摸图像,但是在场景中画布可能很远,因此相机可能会欺骗您。这是我的测试示例代码:

移动 Sprite 的脚本:

    private Rigidbody2D _rigidbody;
    private void Awake() => _rigidbody = GetComponent<Rigidbody2D>();

        private void FixedUpdate()
    
        if (Input.GetKey(KeyCode.A))
        
            var movement = -transform.right * Time.fixedDeltaTime * 250;
            _rigidbody.MovePosition(transform.position + movement);
        
        
        if (Input.GetKey(KeyCode.D))
        
            var movement = transform.right * Time.fixedDeltaTime * 250;
            _rigidbody.MovePosition(transform.position + movement);
        
    

图像上的触发脚本:

    private void OnTriggerEnter2D(Collider2D other)
    
        Debug.Log(other.name);
    

【讨论】:

在二维物理中,我相信 z 坐标被忽略了,所以我认为这不是问题所在。同样在这种情况下,仅出于测试目的,我个人不会编写脚本来移动对象。我只需运行游戏,导航到Scene 选项卡,然后使用Move Tool 拖动对象。

以上是关于Unity OnTriggerEnter2D 未注册的主要内容,如果未能解决你的问题,请参考以下文章

unity ontriggerenter2d 有时不工作

unity OnTriggerEnter2D 不能重复使用

Unity OnTriggerEnter2D CompareTag ||比较标签不一致

碰撞后未调用 Unity5 OnTriggerEnter2D(2D 游戏)

Unity OnTriggerEnter2d() 不工作 |尝试在场景之间切换

Unity OnTriggerEnter2D 有时不起作用