为什么我的子弹穿过敌人却没有检测到碰撞?
Why is my bullet moving through my enemy and not detecting a collision?
我设置了我的 Unity 2D 项目,这样子弹就是触发器,会检测碰撞但不与环境交互,而我的敌人是对撞机,所以它会同时执行这两种操作。我不知道它们是两种不同类型的事实是否会影响碰撞,但我想我会包括那个细节以防它发生。我知道这个问题不是由我的子弹移动得太快引起的,因为当我降低子弹的速度时问题仍然存在。我将在这里包含敌人碰撞和子弹碰撞检测的代码:
void OnCollisionEnter2D (Collision2D coll)
{
if (coll.gameObject.tag == "Proj") {
Destroy(gameObject);
Debug.Log("Hit");
}
现在是子弹:
void OnTriggerEnter2D(Collider2D hitInfo)
{
if (hitInfo.gameObject.tag == "Enemy") {
Destroy(gameObject);
}
子弹正在检测到与敌人的碰撞并删除自己,但敌人没有检测到与子弹的碰撞并拿走 damage/deleting 自己。即使我关闭了项目符号代码的 Destroy(gameObject) 部分,以便它不会在碰撞时自行破坏,我仍然遇到同样的问题,所以我知道在检测到任何东西之前删除它并不重要。我希望我的解释足够彻底,并且有人可以帮助我解决这个问题。
检查人员图片:https://imgur.com/a/TLfcNcp
请显示每个碰撞器的设置,另外 OnCollisionEnter2D and OnTriggerEnter2D 是 2 种不同的东西,并且会在不同的条件下发生,因此请确保您为玩家使用正确的设置。
子弹需要是一个 non-trigger 对撞机,因为您正在调用 OnCollisionEnter 而不是来自敌人脚本的 OnTriggerEnter。
我对触发器行为并不完全熟悉,因为我已经有一段时间没有玩过它们了,但是 this bit of documentation for MonoBehaviour.OnTriggerEnter2D(Collider2D) 是解决您问题的重要起点:
Trigger events are only sent if one of the Colliders also has a Rigidbody2D attached.
我不能肯定地说,但你的屏幕截图表明没有 Rigidbody2D
涉及。
有趣的是,
Collider2D.OnTriggerEnter2D(Collider2D) neglects to specify that a Rigidbody2D
is necessary. I'm not sure what this implies; both MonoBehaviour.OnTriggerEnter(Collider) and Collider.OnTriggerEnter(Collider)(3D 模拟)的文档据说需要 RigidBody
。这两个页面也声称
If both GameObjects have Collider.isTrigger enabled, no collision happens.
但是,来自 Monobehaviour.OnTriggerEnter2D(Collider2D)
的示例代码声称将两个 2D 碰撞器设置为触发器仍将允许调用该函数。
我设置了我的 Unity 2D 项目,这样子弹就是触发器,会检测碰撞但不与环境交互,而我的敌人是对撞机,所以它会同时执行这两种操作。我不知道它们是两种不同类型的事实是否会影响碰撞,但我想我会包括那个细节以防它发生。我知道这个问题不是由我的子弹移动得太快引起的,因为当我降低子弹的速度时问题仍然存在。我将在这里包含敌人碰撞和子弹碰撞检测的代码:
void OnCollisionEnter2D (Collision2D coll)
{
if (coll.gameObject.tag == "Proj") {
Destroy(gameObject);
Debug.Log("Hit");
}
现在是子弹:
void OnTriggerEnter2D(Collider2D hitInfo)
{
if (hitInfo.gameObject.tag == "Enemy") {
Destroy(gameObject);
}
子弹正在检测到与敌人的碰撞并删除自己,但敌人没有检测到与子弹的碰撞并拿走 damage/deleting 自己。即使我关闭了项目符号代码的 Destroy(gameObject) 部分,以便它不会在碰撞时自行破坏,我仍然遇到同样的问题,所以我知道在检测到任何东西之前删除它并不重要。我希望我的解释足够彻底,并且有人可以帮助我解决这个问题。 检查人员图片:https://imgur.com/a/TLfcNcp
请显示每个碰撞器的设置,另外 OnCollisionEnter2D and OnTriggerEnter2D 是 2 种不同的东西,并且会在不同的条件下发生,因此请确保您为玩家使用正确的设置。
子弹需要是一个 non-trigger 对撞机,因为您正在调用 OnCollisionEnter 而不是来自敌人脚本的 OnTriggerEnter。
我对触发器行为并不完全熟悉,因为我已经有一段时间没有玩过它们了,但是 this bit of documentation for MonoBehaviour.OnTriggerEnter2D(Collider2D) 是解决您问题的重要起点:
Trigger events are only sent if one of the Colliders also has a Rigidbody2D attached.
我不能肯定地说,但你的屏幕截图表明没有 Rigidbody2D
涉及。
有趣的是,
Collider2D.OnTriggerEnter2D(Collider2D) neglects to specify that a Rigidbody2D
is necessary. I'm not sure what this implies; both MonoBehaviour.OnTriggerEnter(Collider) and Collider.OnTriggerEnter(Collider)(3D 模拟)的文档据说需要 RigidBody
。这两个页面也声称
If both GameObjects have Collider.isTrigger enabled, no collision happens.
但是,来自 Monobehaviour.OnTriggerEnter2D(Collider2D)
的示例代码声称将两个 2D 碰撞器设置为触发器仍将允许调用该函数。