我有一个脚本可以检测播放器何时与平台(立方体)发生碰撞。但即使我从平台侧面触摸它,它也会显示Debug.Log,我希望只有当播放器位于平台之上时才显示Debug.Log,当我的意思是在顶部它就像在这个截图中:
我有一个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");
}
}
}
答案 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");
}
}
}
图片我刚才所说的内容: