How to detect an object in a trigger?

后端 未结 3 1588
[愿得一人]
[愿得一人] 2021-01-20 01:49

I’ve placed in the scene an object with a trigger and I want the console sends me a message detecting if the player is in or out of the trigger when I click a button . When

相关标签:
3条回答
  • 2021-01-20 02:18

    Use OnTriggerEnter and OnTriggerExit instead of OnTriggerStay to keep the current state:

    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);
            }
        }
    }
    
    0 讨论(0)
  • 2021-01-20 02:26

    Your logic is totally wrong. You're only checking if the TRIGGER STAYS IN YOUR BOUNDS but still trying to log "Map OFF" message which will never happen.

    Instead of OnTriggerStar method use OnTriggerEnter and OnTriggerExit. Then print the message only when needed ( or in debug mode ) :

    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;
    
    0 讨论(0)
  • 2021-01-20 02:28

    Try:

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

    This will switch it on when you enter and off when you exit (althout all it does right now is print the result).

    Hope it helps.

    0 讨论(0)
提交回复
热议问题