Unity3d 未调用冲突回调函数

Unity3d 未调用冲突回调函数,unity3d,unity2d,Unity3d,Unity2d,我是Unity的新手,目前正在开发2D打斗机。这个动作很完美,但是我的对撞机没有做他们应该做的。。。我想检测两个游戏对象是否发生碰撞(矛和玩家2),以及碰撞玩家2的健康点是否会减少矛攻击伤害 游戏对象的名称也是它们的标签。Spears预制件具有以下配置:SpriteRendered(材质Sprites默认值)、BoxCollider2D(材质无物理材质2D、IsTrigger(未激活)、UsedByEffector(也未激活)Rigidbody2D(运动学、无材质、模拟(激活)、运动学接触(激活

我是Unity的新手,目前正在开发2D打斗机。这个动作很完美,但是我的对撞机没有做他们应该做的。。。我想检测两个游戏对象是否发生碰撞(矛和玩家2),以及碰撞玩家2的健康点是否会减少矛攻击伤害

游戏对象的名称也是它们的标签。Spears预制件具有以下配置:SpriteRendered(材质Sprites默认值)、BoxCollider2D(材质无物理材质2D、IsTrigger(未激活)、UsedByEffector(也未激活)Rigidbody2D(运动学、无材质、模拟(激活)、运动学接触(激活)、其余的标准配置))

使用系统集合;
使用System.Collections.Generic;
使用UnityEngine;
公共类先锋:单一行为{
公共矢量2速度;
公共交通延误;
刚体2d rb;
无效开始()
{
rb=GetComponent();
rb.速度=速度;
销毁(游戏对象,延迟);
}
无效更新()
{
rb.速度=速度;
}
}
玩家配置 长矛构型 这是我以前尝试过的代码

OnCollision2D(Collision2D target);
{
    if (target.gameObject.tag == "Spear")
    {
        hp = -1;
        if (hp <= 0)
        {
            alive = false;
        }
    }
}
OnCollision2D(碰撞2D目标);
{
如果(target.gameObject.tag==“矛”)
{
hp=-1;

如果(hp导致
OnCollisionCenter()
无法工作的原因:

科利森

1。或未连接

如果是3D游戏对象,两个游戏对象中至少有一个必须附加
刚体
。如果是2D游戏对象/2D碰撞器,则应附加
刚体

2。拼写错误

您拼写错误。它的拼写也区分大小写

正确的拼写:

对于三维网格渲染器/碰撞器:

对于二维喷水灭火器/碰撞R2D:

3。Collider已选中了
IsTrigger
。取消选中此项可调用OnCollisionXXX函数

4。脚本未连接到任何冲突的游戏对象。请将脚本连接到游戏对象

5。您为回调函数提供了错误的参数

对于三维网格渲染器/碰撞器:

参数为
碰撞
碰撞器

它是:

void OnCollisionEnter(Collision collision) {} 
不是

void OnCollisionEnter(Collider collision) {}
对于二维喷水灭火器/碰撞R2D:

6.碰撞的两个刚体都启用了
iskinetic
。在这种情况下不会调用回调函数

这是完整的综合表


因此,从您尝试的事情来看,它是否从未检测到任何碰撞,或者是当您检测到碰撞时,它没有做您想要的。它甚至没有检测到碰撞如果您将IsKinetic设置为true,它将不会检测到碰撞。顺便说一句,您在
OnCollision2D(Collision2D目标)的末尾有
所以它肯定不起作用。@CNuts这不是真正的问题。是拼写问题
void OnCollisionEnter(Collider collision) {}