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 CompareTag ||比较标签不一致
碰撞后未调用 Unity5 OnTriggerEnter2D(2D 游戏)