Отключение объекта
Задаю скорее всего очень простой вопрос, базовый, однако ни где не смог найти его решение. Мне нужно отключить объект на котором висит скрипт, я могу сделать
publc GameObject molot;
molot.SetActive(false);
Это безусловно будет работать, но, зачем указывать лишнюю переменную и переносить туда объект, если скрипт висит на том самом объекте, который мне нужно выключить(включать не надо). Наверняка есть способ указать юнити, что нужно отключить именно тот объект, на котором и находится скрипт
Ответы (1 шт):
Скрипт, который висит на объекте, хранит ссылку на самого себя, которую можно получить словом this. Если вы хотите изменить какую-либо переменную в скрипте из этого же скрипта, то получаете подобный код: this.variable = ..., однако this подставляется по умолчанию, поэтому вы можете просто писать variable = ...
Имея ссылку на скрипт, вы можете получить объект, на котором висит этот скрипт с помощью [ссылка_на_скрипт].gameObject.
Теперь к сути дела
Так как this подставляется самостоятельно, то чтобы получить объект, на котором висит скрипт из этого же скрипта вы просто пишите gameObject.
Чтобы отключить объект:
gameObject.SetActive(false);
Чтобы отключить скрипт на этом же объекте:
this.enabled = false;
ИЛИ
enabled = false; // Опять же this подставляется самостоятельно
Это пишется в каком-либо методе, чтобы компилятор знал, когда вообще этот код надо выполнять.
Обязательно писать this нужно только, например, в конструкторах, где может произойти конфликт имен параметра конструктора и глобальной переменной класса:
public class MyClass : MonoBehaviour {
public int variable;
public MyClass (int variable) {
this.variable = variable;
}
}