【问题标题】:OnTriggerExit returning untagged after one successful tag returnOnTriggerExit 在一个成功的标签返回后返回无标签
【发布时间】: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平台生成运行正常,但是当我把上面的触发器加到平台上的时候,就出现了这种情况。我不知道为什么会这样。并且球的标签在检查器中保持不变,即“玩家”。
  • 如果检查器显示玩家的标签没有改变,那么未标记的对象不是玩家。而是打印出对象的名称。

标签: c# unity3d


【解决方案1】:

我刚刚找到了解决方案,

而不是使用col.gameObject.tag

尝试使用col.collider.gameObject.transform.tag

【讨论】:

    猜你喜欢
    • 2012-11-09
    • 1970-01-01
    • 1970-01-01
    • 2019-11-18
    • 2018-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多