繁体   English   中英

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

[英]How to detect an object in a trigger?

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

码:

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");
     }
 }
}

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

希望能帮助到你。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM