如何解决Unity OnTriggerEnter2D未注册
我不熟悉使用统一性,在遇到触发冲突进行注册时确实遇到了问题。
public void OnTriggerEnter2D(Collider2D other)
{
print("collide");
if (other.CompareTag("Fish"))
{
print("Caught");
}
}
两个项目上都有2D多边形碰撞器和刚体。我还设置了一个触发器(尝试将两者都作为触发器)。但是,一个UI项目是一个精灵,另一个是图像。 这两个项目也都标有“鱼”
非常感谢您的帮助。 谢谢
解决方法
我认为有四件事需要发生,以便OnTriggerEnter
被调用:
-
两个对象的对撞机实际上需要重叠。仅仅因为它们渲染的像素是重叠的,并不意味着它们的对撞机是重叠的。可以在编辑器中检查。
Scene
标签中的绿色对撞机指示了它们的对撞机。如果看不到任何内容,请确保标记为Gizmos
的按钮已打开。 -
这两个对象必须位于设置为相互碰撞的物理层中。您可以在
Edit > Settings > Physics2D > Layer Collision Matrix
中进行检查。 -
两个对象都需要具有Rigidbody2D组件。确保它们不是用于3D物理的刚体组件。
-
包含
OnTriggerEnter2D
事件的对象需要具有isTrigger = true
。
一个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);
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。