如何检测触发器中的对象?
我已经在场景中放置了一个带触发器的对象,我希望控制台向我发送一条消息,当我点击一个按钮时,该消息会检测玩家是否在触发器中。 当我玩时,它只会在玩家进入触发器时向我发送消息。
码:
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"); } } } }
使用OnTriggerEnter
和OnTriggerExit
而不是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
方法使用OnTriggerEnter
和OnTriggerExit
。 然后仅在需要时(或在调试模式下)打印消息:
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"); } } }
当你退出时进入和关闭时它会打开(现在它只是打印结果)。
希望能帮助到你。