【发布时间】:2019-12-09 18:49:19
【问题描述】:
我正在开发 Unity3d 并遇到与碰撞器和触发器相关的问题。 我有一个名为 Platform 的 3d 平面 parent,一个名为 TriggerChecker 的 child 空对象。一个标记为“Player”的球体在平台上移动,当它通过触发器时,应调用 OnTriggerExit 方法。我有多个平台,例如屏幕截图中的平台。 问题是: 对于第一个平台,返回的对撞机标签是“玩家”,这是我想要的,但是在通过第二个平台时,对撞机标签是“未标记”。这是因为使用了多个coliiders,例如父母和孩子中的一个。如何使对撞机正常工作。
这是附加到 TriggerChecker 对象的 c# 脚本,只是相关代码。
void OnTriggerExit(Collider col){
Debug.Log("Exit "+col.gameObject.tag);
if (col.gameObject.tag == "Player") {
Invoke("FallDown",1f);
}
}
void FallDown(){
GetComponentInParent<Rigidbody> ().useGravity = true;
GetComponentInParent<Rigidbody> ().isKinematic = false;
Destroy (transform.parent.gameObject,2f);
}
【问题讨论】:
-
我敢打赌,您看到的
untagged对撞机是另一个平台。 -
但是为什么它在与球体(Ball)碰撞时会返回平台的标签?
-
如果有 两个 平台,并且一个平台与另一个平台发生碰撞,这就是你会得到的。但对于所有其他对象也是如此。 我的意思是:你确定是球在打印你所看到的信息吗?您确定球的标签正在更改(它是否在检查器中显示此更改)?
-
其实平台是Prefab生成的,游戏用Prefab平台生成运行正常,但是当我把上面的触发器加到平台上的时候,就出现了这种情况。我不知道为什么会这样。并且球的标签在检查器中保持不变,即“玩家”。
-
如果检查器显示玩家的标签没有改变,那么未标记的对象不是玩家。而是打印出对象的名称。