嘿,我有这个脚本在一个预制的炮弹,这是假设被摧毁时,碰撞的东西。我的问题是,当它碰撞的东西,这个方法从来没有触发,我不知道为什么。我甚至有调试,它从来没有出现在它。炮弹有刚体(运动学)和箱冷却!他是假设碰撞的东西也有冷却。
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);
}
}
}
6条答案
按热度按时间niwlg2el1#
我想是因为
kinematic
运动学Rigidbody2D将仅与动力学Rigidbody2D实体类型发生碰撞。例外情况是,如果Rigidbody2D.useFullKinematicContacts设置为true,则它将与所有其他Rigidbody2D实体类型发生碰撞。
https://docs.unity3d.com/ScriptReference/RigidbodyType2D.Kinematic.html
尝试将
Body Type
设置为Dynamic
,并查看OnCollisionEnter
是否执行。将动态
Rigidbody2D
添加到其他碰撞器vhmi4jdf2#
复制完全相同的代码,你已经工作,我的猜测是,你是使用刚体,而不是刚体2D组件对你的游戏对象。
hyrbngr73#
我知道已经1年多了。但是我遇到了同样的问题,测试了所有的东西(花了3个小时试图修复它)...然后我试着把“void OnCollisionEnter2D”放在“更新”功能之前...结果...它成功了。
我的对象发生碰撞(彼此反弹),但功能没有被触发。
kd3sttzy4#
很像乔治森,对我来说,没有一个更新功能使它无法触发。添加一个空的更新功能使它工作。这只是奇怪的,因为我正在遵循一个教程,并没有一个更新功能在所有。我使用的是测试版的2019.3虽然所以可能只是一个错误。
hfsqlsce5#
您的问题是因为您在void update中编写了OnCollisionEnter2D函数,修改它并在void update外编写,您的问题将得到解决。
vktxenjb6#
对于到达此处并可能很难调试此问题的其他人,在将脚本从OnTriggerEnter2D更改为OnCollisionEnter2D时需要小心,因为一个脚本接收Collider2D作为arg,另一个脚本接收Collision2D。Visual Studio不会给予任何警告,因此很容易忽略。