嘿,我在弹丸的预制件上放了这个脚本,假设该脚本在与某些物体碰撞时会被破坏。好吧,我的问题是,当它与某些东西碰撞时,这种方法永远不会触发,我也不知道为什么。我什至拥有该调试功能,而且它从未出现过。弹丸具有刚体(运动学)和盒大肠菌!他应该撞的东西也有大肠菌病。
public class ProjectileColision : MonoBehaviour {
public GameObject projectile;
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
}
void OnCollisionEnter2D(Collision2D col)
{
Debug.Log("executed");
if (col.gameObject.tag == "Projectile")
{
Destroy(projectile,0);
}
}
}
答案 0 :(得分:1)
复制与您使用的代码完全相同的代码,我的猜测是您在GameObject上使用的是Rigidbody2D组件,而不是Rigidbody2D组件。
答案 1 :(得分:1)
我认为是因为kinematic
运动刚体2D仅与动态刚体2D碰撞 体型。例外是将Rigidbody2D.useFullKinematicContacts设置为true,在这种情况下,它将与所有其他Rigidbody2D身体类型发生碰撞。
https://docs.unity3d.com/ScriptReference/RigidbodyType2D.Kinematic.html
尝试将Body Type
设置为Dynamic
,看看是否执行OnCollisionEnter
。
OR
将动态Rigidbody2D
添加到其他对撞机
答案 2 :(得分:0)
我知道已经超过1年了。但是我遇到了同样的问题,测试了所有内容(花费了3个小时来修复它)...然后我尝试将“ void OnCollisionEnter2D”放在“ Update”功能之前,然后...成功了。
我的对象发生碰撞(彼此反弹),但未触发功能。
答案 3 :(得分:0)
就像乔治·莫里(George Mori)一样,对我来说,没有更新功能会使它无法触发。 添加一个空的Update函数使其生效。这只是奇怪的原因,因为我正在学习教程,而根本没有更新功能。 我正在使用2019.3的Beta版,因此可能只是一个错误。