如何检测触发器中的对象?

我已经在场景中放置了一个带触发器的对象,我希望控制台向我发送一条消息,当我点击一个按钮时,该消息会检测玩家是否在触发器中。 当我玩时,它只会在玩家进入触发器时向我发送消息。

码:

using System.Collections; using System.Collections.Generic; using UnityEngine; public class MapDetect : MonoBehaviour { void OnTriggerStay(Collider other) { if (other.gameObject.tag == "Player") { Debug.Log ("Map ON"); } else { if (other.gameObject.tag == "Player") { Debug.Log ("Map OFF"); } } } } 

使用OnTriggerEnterOnTriggerExit而不是OnTriggerStay来保持当前状态:

 public class MapDetect : MonoBehaviour { private bool isTriggered; void OnTriggerEnter(Collider other) { if (other.gameObject.CompareTag("Player")) isTriggered = true; } void OnTriggerExit(Collider other) { if (other.gameObject.CompareTag("Player")) isTriggered = false; } void Update(){ if(Input.GetKey(KeyCode.Space)){ Debug.Log(isTriggered); } } } 

你的逻辑是完全错误的。 您只是检查TRIGGER是否在您的绑定中,但仍然尝试记录“Map OFF”消息,这将永远不会发生。

而不是OnTriggerStar方法使用OnTriggerEnterOnTriggerExit 。 然后仅在需要时(或在调试模式下)打印消息:

 void OnTriggerEnter(Collider other) { if ( other.gameObject.CompareTag("Player") ) { m_IsPlayerOnTheMap = true; } } void OnTriggerExit(Collider other) { if( other.gameObject.CompareTag("Player") ) { m_IsPlayerOnTheMap = false; } } void Update() { #if DEBUG if ( m_IsPlayerOnTheMap ) { Debug.Log("Map ON"); } else { Debug.Log("Map OFF"); } #endif } private bool m_IsPlayerOnTheMap = false; 

尝试:

 using System.Collections; using System.Collections.Generic; using UnityEngine; public class MapDetect : MonoBehaviour { void OnTriggerEnter(Collider other) { if (other.gameObject.CompareTag("Player")) { Debug.Log ("Map ON"); } } void OnTriggerExit(Collider other) { if (other.gameObject.CompareTag("Player")) { Debug.Log ("Map OFF"); } } } 

当你退出时进入和关闭时它会打开(现在它只是打印结果)。

希望能帮助到你。