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