我已经在场景中放置了一个带触发器的对象,我希望控制台向我发送一条消息,当我点击一个按钮时,该消息会检测玩家是否在触发器中。当我玩时,它只会在玩家进入触发器时向我发送消息。
代码:
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");
}
}
}
}
答案 0 :(得分:4)
使用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);
}
}
}
答案 1 :(得分:0)
你的逻辑是完全错误的。您只是检查 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;
答案 2 :(得分:0)
尝试:
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");
}
}
}
当你退出时进入和关闭时会打开它(现在它只是打印结果)。
希望它有所帮助。