当播放器位于平台之上时,我怎样才能使用ThirdPersonController?

时间:2016-11-12 21:39:56

标签: c# unity3d

我有一个脚本可以检测播放器何时与平台(立方体)发生碰撞。但即使我从平台侧面触摸它,它也会显示Debug.Log,我希望只有当播放器位于平台之上时才显示Debug.Log,当我的意思是在顶部它就像在这个截图中:

Screenshot

我有一个ThirdPersonController一个Elevator(空GameObject)平台(Cube)Platform1(立方体)和Button(Capsule)。

using UnityEngine;
using System.Collections;

public class DetectPlayer : MonoBehaviour {

    void OnCollisionEnter(Collision collision)
    {
        if (collision.gameObject.name == "Platform")
        {
            Debug.Log("On Platform");
        }
    }
}

1 个答案:

答案 0 :(得分:1)

有时,你必须使用对撞机和触发器的组合来获得你想要的东西,这是其中之一。

1 。重复平台 GameObject。将复制的平台放在原始的平台下,然后将其命名为 OnTop Detector

2 。选择 OnTop Detector GameObject并将其向上移动,使其不会触及原始的 Platform GameObject。再次确保它们没有接触但略微高于彼此。

4 。对 OnTop Detector GameObject进行缩放,使其小于原始的 Platform GameObject。这样做的原因是为了使它不会检测到何时在侧面并触摸,但会检测到您在何时处于最顶层。

5 。将 OnTop探测器 GameObject Box Collider 检查为IsTrigger。

6 。将OnTriggerEnter添加到您的问题代码中。当玩家触摸平台的一侧时,将调用OnCollisionEnter。当平台的OnTop时,将调用OnTriggerEnter

7 。最后,您现在可以禁用/删除附加到 OnTop Detector GameObject的网格渲染器。我通常只禁用它,这样我以后可以在使用可视指南编辑 OnTop Detector 的对撞机时启用它。

因此,您使用OnTriggerEnter来了解播放器何时位于平台之上,OnTriggerEnter知道播放器何时触及平台。

脚本

public class DetectPlayer : MonoBehaviour
{
    void OnCollisionEnter(Collision collision)
    {
        if (collision.gameObject.name == "Platform")
        {
            Debug.Log("Touching Platform");
        }
    }

    void OnTriggerEnter(Collider other)
    {
        if (other.gameObject.name == "OnTop Detector")
        {
            Debug.Log("On Top of Platform");
        }
    }
}

图片我刚才所说的内容:

enter image description here