Определить, находится ли какой-либо объект с тегом внутри триггера - PullRequest
0 голосов
/ 27 декабря 2018

У меня есть пустой объект с блоком коллайдера (триггера), внутри этого пустого объекта у меня есть несколько кубов с одинаковым тегом, поэтому я хочу создать экземпляр Text, когда все эти кубы выйдут за пределы пустого объекта (используя OnTriggerExit).

Это код, который я пробовал, но он не работал:

List<string> contacts = new List<string>();

void OnCollisionExit(Collision col)
{
    contacts.Add(col.gameObject.tag);
    if (contacts.Contains("Cube"))
    {
        GameObject canvas = GameObject.Find("Canvas");
        Text text = Instantiate(Text, new Vector3(562, 1800, 0), Quaternion.identity);
        text.transform.SetParent(canvas.transform);
    }
}

1 Ответ

0 голосов
/ 27 декабря 2018

Отслеживайте количество кубиков в триггере.Установите его в начале сцены, увеличивайте, используя OnTriggerEnter, и уменьшайте, используя OnTriggerExit, когда тегом является «Cube».Как только он достигнет нуля, вызовите вашу функцию.

// Inside of MonoBehavior on the GameObject with the trigger.
public int cubesCurrentlyInTrigger;

void Start() 
{
    cubesCurrentlyInTrigger = 3; // Or however many cubes at start
}

void OnTriggerEnter(Collider col) 
{
    // check for entering cubes
    if (col.tag == "Cube")
    {
        cubesCurrentlyInTrigger++;
    }
}

void OnTriggerExit(Collider col) 
{
    // check for exiting cubes
    if (col.tag == "Cube") 
    {
        cubesCurrentlyInTrigger--; // Could use `--cubesInTrigger` inside the if,
                                   // but this is more readable

        if (cubesCurrentlyInTrigger == 0) 
        {
            DoFunction(); // Put your function here.
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...