ДОСТУП К СКРИПТУ ДРУГОГО ОБЪЕКТА
Очень часто начинающие в Unity задаются подобным вопросом, поэтому давайте разберём эту тему раз и навсегда.
Когда вы выделяете GameObject, то всё, что находится у него в инспекторе - это компоненты в том числе и ваши собственные скрипты.
Обратиться к компоненту можно с помощью метода GetComponent<Тип>(). Тип - имя компонента либо вашего класса.
Например у вас на сцене есть объекты orc и door. Вы хотите чтобы orc обратился к двери и открыл её. У двери есть свойство "открыто/закрыто"
using
UnityEngine;
public
class
Door : MonoBehaviour
{
-
public
bool
isOpen =
false
;
}
Чтобы орк обратился к скрипту двери, то можно поступить разными способами.
Способ 1
Передать орку ссылку на дверь вручную. Для этого создаём у орка свойство, которое будет содержать ссылку на скрипт конкретной двери.
using
UnityEngine;
public
class
Orc : MonoBehaviour
{
-
public
Door someDoor;
}
Теперь в инспекторе орка увидим появившееся поле someDoor в которое перенесём объект(GameObject) door (на котором есть скрипт Door) со сцены.
И орк может напрямую обратиться к двери и открыть её например.
using
UnityEngine;
public
class
Orc : MonoBehaviour
{
-
public
Door someDoor;
-
private
void
Start()
-
{
-
// орк выбивает дверь ногой
-
someDoor.isOpen =
true
;
-
}
}
Способ 2
Орк может самостоятельно найти дверь в мире, перебрав все объекты в сцене и найти дверь по её имени
using
UnityEngine;
public
class
Orc : MonoBehaviour
{
-
// приватное свойство его уже не видно в инспекторе
-
private
Door someDoor;
-
private
void
Start()
-
{
-
someDoor = GameObject.Find(
"door"
).GetComponent<Door>();
-
someDoor.isOpen =
true
;
-
}
}
Но метод Find и подобные ему не рекомендуют часто использовать, например в Update, так как подобные поиски могут нагрузить вашу игру. Поэтому лучше такие операции выполнять либо редко, либо вначале игры. Это касается и вызов GetComponent, поэтому кешируйте свойства, как показано выше.
Способ 3
Орк может поискать дверь не только по имени, но и по скрипту.
someDoor = FindObjectOfType<Door>();
Но в этом случает в someDoor запишется первая попавшаяся дверь на сцене.
Конечно это не все способы поиска нужного объекта. Но для начала этого вам будет достаточно.