FindObjectOfType - Как правильно написать в OnTriggerStay для обнаружения этого объекта - PullRequest
0 голосов
/ 19 января 2020

Мне нужно использовать пустые компоненты скрипта в качестве тегов (потому что в Unity мы можем добавить только один тег к объекту, мне нужно более одного). Затем в другом объектном сценарии я хочу найти этот 1-й объект по 'tag' = имени этого пустого сценария. Поэтому я использовал FindObjectOfType <> (), но не знаю, как правильно его использовать в OnTriggerStay.

    private void OnTriggerStay(Collider other)
{
    if (other == GameObject.FindObjectOfType<First>())
    {
        CheckPos1 = true;
    }

}

Похоже, что не работает, потому что CheckPos1 не меняется на «true».

Ответы [ 2 ]

0 голосов
/ 19 января 2020

Большое спасибо, Сергей. Я думаю, что я понимаю это больше! Я нашел решение для моей проблемы, просто добавил Object в качестве дочернего объекта в мой основной объект и добавил тег для этого объекта. В моей игре на каждом уровне будет только 1 объект с тегом «Первый», затем еще один «Второй, Третий и т. Д.». Это игра-головоломка, и я работаю над тем, чтобы проверить, решили ли вы головоломку, поставив кирпичи в правильные места:).

0 голосов
/ 19 января 2020
private void OnTriggerStay(Collider other)
{
    CheckPos1 = other.GetComponent<First>();
}

Чтобы понять, как это работает, прочитайте эту ссылку: https://docs.unity3d.com/ScriptReference/Object-operator_Object.html

GetComponent<>() ищет компонент сценария именно в том объекте, которым вы являетесь вызов этого метода.

GameObject.FindObjectOfType<First>() возвращает первый объект типа First из всей сцены, а не из столкновения, поэтому он не будет работать для вашего случая, если вы иметь более 1 объекта с компонентом First. И это намного медленнее, поскольку он ищет по всей сцене.

...