Как отключить объект в юнити

Деактивация Игровых Объектов

Чтобы временно удалить GameObject основной объект в сценах Unity, который может представлять персонажей, реквизит, декорации, камеры, путевые точки , и больше. Функциональность GameObject определяется прикрепленными к нему компонентами. Подробнее
См. в Словарь из вашего scene Сцена содержит окружение и меню вашей игры. Думайте о каждом уникальном файле сцены как об уникальном уровне. В каждой сцене вы размещаете свое окружение, препятствия и декорации, по сути проектируя и создавая свою игру по частям. Подробнее
См. в Словарь , вы можете пометить GameObject как неактивный.

Для этого перейдите в Инспектор окно Unity, в котором отображается информация о текущем выбранном игровом объекте, активе или настройках проекта. , что позволяет просматривать и редактировать значения. Дополнительная информация
Просмотрите в окне Словарь и снимите флажок слева от названия игрового объекта. Имена деактивированных игровых объектов отображаются в окне иерархии блеклыми.

Чтобы деактивировать GameObject с помощью скрипта, используйте метод SetActive. Чтобы узнать, является ли объект активным или неактивным, проверьте свойство activeSelf.

Деактивировать родительский игровой объект

Если вы деактивируете родительский игровой объект, вы также деактивируете все его дочерние игровые объекты, поскольку деактивация переопределяет параметр activeSelf для всех дочерних игровых объектов. Дочерние игровые объекты возвращаются в исходное состояние при повторной активации родителя.

Чтобы узнать, активен ли дочерний игровой объект в вашей сцене, используйте свойство activeInHierarchy.

Примечание. Свойство activeSelf не всегда верно, если вы проверяете дочерний объект GameObject, потому что, даже если он установлен как активный, вы могли установить один из его родительские игровые объекты в неактивные.

Выбранный игровой объект (куб) становится активным, но остается неактивным до тех пор, пока вы не сделаете его родительский игровой объект активным..Выбранный игровой объект (куб) становится активным, но остается неактивным до тех пор, пока вы не сделаете его родительский игровой объект активным.

ACTIVATE and DEACTIVATE GameObjects through CODE in Unity

Introduction – Why activate and deactivate GameObjects?

GameObjects are the objects that can be placed in a scene in Unity, the simplest gameobject has at least a Transform component assigned, that allows to know its position, rotation and scale. You can add components to these GameObjects and give them a more specific behavior. For example, a Camera in Unity is an empty GameObject to which we add the Camera component and the AudioListener component.

When a GameObject is active in the hierarchy and the game is running, Unity periodically updates each of its components and executes some other functions, all this automatically. If we deactivate the GameObject, this process will not take place and we will achieve the effect that the GameObject disappears from the scene.

Скрипты в Unity3D. Урок 0. Основы

Два основных компонента у объекта в Unity3D — это Transform и GameObject.

GameObject

GameObject — основа, контейнер, который содержит в себе все компоненты любой объект в Unity3D. Чтобы удалить, к примеру, игровой объект — удалять нужно именно GameObject этого объекта. Для доступа к GameObject — используется переменная, которая присутствует по умолчанию в любом скрипте, унаследованном от MonoBehaviour (то есть в любом скрипте, созданном через Unity3D).

Получение ссылки на игровой объект

Данным способом можно из одного скрипта получить ссылку на другие игровые объекты и управлять ими, их дочерними объектами, а также их компонентами.

Уничтожение игрового объекта

Данным способом можно удалить игровой объект.

Активация/деактивация игрового объекта

Деактивация объекта аналогична снятия галочки инспекторе Unity3D, которая обведена красным цветом на скриншоте ниже.

ul0_setActiveFalse

Деактивация элемента деактивирует также все его дочерние объекты и останавливает выполнение в их скриптов.

Добавление новых компонентов и скриптов игровому объекту

Таким образом можно добавить абсолютно любой компонент, либо скрипт, который можно добавить в редакторе Unity3D.

Получение доступа к компоненту игрового объекта

Таким же образом можно получить доступ к любому компоненту игрового объекта.

Переименование игрового объекта. Считывание имени объекта
Сделать объект статичным

Данный код аналогичен установке/снятию галочки в редакторе Unity3D (на скрине ниже).

ul0_setStatic

Установить слои игровому объекту, а также считать их
Установить тэг игровому объекту, а также его считывание

Transform

С трансформом всё немного проще — этот компонент не является основой, но тем не менее — является основной и, главное, неотъемлемой частью GameObject’а. Он отвечает за месторасположение объекта на сцене, его «вращении», размерах, а также содержит информацию о дочерних и родительском объектах.

Это единственные компонент, который невозможно удалить из GameObject.

Изменение положение объекта

За положение объекта на сцене отвечает элементы transform.position и transform.localPosition.

Они оба являются переменной типа Vector3 и имеют в себе 3 главных составляющих x,y и z, которые соответствуют координатам в трехмерном пространстве. Следует учитывать, что x, y и z невозможно менять напрямую — они только для чтения. Чтобы добавить единичку к x — нужно добавить к самому transform.position новый Vector3, который равен (1,0,0), что добавить к x единицу, а к y и z — нули.

Чем же отличаются transform.position и transform.localPosition?

Их главное (и единственное отличие) заключается в том, что position — показывает и принимает координаты объекта, относительно мировых координат, а localPosition — относительно родительского объекта. Если же игровой объект является «корневым», то есть у него нет родительских объектов, то position и localPosition будут равны.

Движение объекта

Сначала рассмотрим элементарные варианты.

Как мы уже говорили — position (буду далее использовать именно его, так как отличия от localPosition только в том, относительно чего эти координаты) является переменной типа Vector3. Поэтому для его изменения нужно либо прибавить к нему другой вектор, либо вычесть другой вектор, либо заменить его другим вектором.

Рекомендуется использовать функцию transform.Translate.

Это уже не переменная, как transform.position — это функция. У неё есть два входящих параметра:

  1. Vector3, который отвечает за то, в каком направлении будет двигаться объект;
  2. Space.Self/Space.World — то, относительно чего будет двигаться игровой объект. Space.Self — аналогичен transform.localPosition, а Space.World — аналогичен transform.position.

Вращение объекта

За вращение объекта отвечает компонент transform.rotation, transform.localRotation и функция transform.Rotate.

Здесь все аналогично transform.position. Кроме одного, несмотря на то, что в редакторе Unity3D Rotation представляет собой Vector3, то есть вращение относительно оси X, оси Y, оси Z. Но в коде оно представлено в виде кватернионов. Что такое кватернион — отдельная история. И обычно её изучают в вузах. По факту — знание кватернионов не обязательно для разработки игр. К счастью разработчики Unity3D это понимают и сделали две удобные для программистов вещи:

  1. Функция transform.Rotate(Vector3 vector, Space.World(либо Self));
  2. Функция Quaternion.Euler(float x,float y,float z), которая как раз возвращает кватернион;

Меньше слов — больше кода:

Вместо rotation можно применять localRotation, аналогично position.

Такой подход аналогичен transform.Translate и также является более производительным.

Поиск других объектов на сцене

Есть два подхода поиска объекта на сцене.

  1. GameObject.Find(«имяОбъекта»); Он же «пушка по воробьям». Несмотря на кажущуюся скорость — метод является достаточно прожорливым и при частом использовании на большой сцене может стать большой проблемой. Однако он же самый простой способ (хотя и ненадежный). А ненадежный он потому, что редактор Unity3D позволяет давать одинаковые имена объектам. А GameObject.Find возвращает только один элемент, который он найдет первым.
  2. transform.FindChild(«имяДочернегоОбъекта») — функция возвращает переменную типа transform нужного объекта. Для доступа к GameObject этого объекта особых усилий прилагать не нужно, так как ссылка на него уже содержится в transform (как и ссылка на transform содержится в GameObject’е).

Также можно запрашивать дочерние элементы по их номеру:

Также дочерний элемент может запросить родительский, а также родительский родительского и так далее:

В следующих статьях будет информация о том, что такое private, public, static, отправление сообщений игровым объектам.

12 комментариев для “Скрипты в Unity3D. Урок 0. Основы”

Отличный урок! Планируется ли продолжение?

Здравствуйте! Да, продолжение планируется и уже есть заготовки, но времени, увы, нет совсем =(

Присоединяюсь к предыдущем комментатору, очень жду продолжения.
Ну и отдельное спасибо за этот урок.

var objectBoxCollider = gameObject.GetComponent();
ещё бы растолковать,нубу ,почему, где, и в каком случае слова пишутся с маленькой и большой буквы.
Типа — функции с маленькой, переменные с большой.
Почему object с маленькой а BoxCollider c большой.
И краткие примеры, как эти коды можно в коде применять..
//и кто такой «anotherTransformLink»
var anotherTransformLink = childGameObject.transform;

И коментарии бы типа:
var childTransform = transform.FindChild(«myChild1»); // находим myChild1 помещаем в childTransform
var childGameObject = childTransform.gameObject; // тут что происходит я хрен чё понимаю откуда что берётся
var anotherTransformLink = childGameObject.transform; // и зачем столько букав

А так-то нормуль, есть что законспектировать.

Здравствуйте! Спасибо за советы, я обязательно их учту при написании следующих статей.
Постараюсь вкратце ответить на ваши вопросы.
1) Слова в коде относятся к командам, классам, интерфейсам, или именам переменных. Обычно в C# с большой буквы пишется класс, интерфейс, или переменная с модификатором доступа ‘public’ (не забываем про функции). Где, как и в каких случаях что используется тяжело описать, так как это основы языка программирования C#.
Например:
var myObject = new MyObject().
Конкретно в данном случае — MyObject — это класс. А myObject — это конкретный экземпляр класса MyObject.

А вот другой пример:
public GameObject MyGameObject;
Это публичное свойство класса типа GameObject. Сам экземпляр данного класса называется MyGameObject и может быть доступен как и изнутри самого класса, так и из других классов, у которых есть ссылка на данный экземпляр класса.

2) Почему objectBoxCollider с маленькой, а BoxCollider с большой? ObjectBoxCollider — это имя класса, а objectBoxCollider — это его экземпляр..

К тому же Unity3d очень активно использует наследование (хотя бы взять любой скрипт — он наследован от MonoBehavior. Нужно знать как работает наследование и какой базовый функционал (и какие свойства) уже доступны «из коробки» у любого класса, который будет наследован от него.
Всё-таки Unity3D подразумевает, что у разработчика есть базовые знания C#, или JS. Я бы вам порекомендовал вначале почитать статьи с замечательного сайта https://metanit.com/sharp/tutorial/
Лучше чем там я объяснить всё равно не смогу

оО, о как, очень рад что сайт живой,ато вновь и вновь прочёсываю инет своими тегами, гляжу — котодомик))
думаю — та-ак, помню что там чтото полезное было пойду ещё загляну) а тут опаньки, живая планета,.
только вот пользователи сетей видать не очень жалуют домен «рф» и встречается он редковато,
буду значит наблюдать за сайтом,по возможности единомышленников подтягивать,
пс
C#

transform.position += new Vector3(1,0,0); // добавляем к X единице (смещаем на единицу)
transform.position += new Vector3(1,0,2)*Time.deltaTime; // двигаем объект в реальном времени с установленными значениями
по осям х и z

int speed = 5;
void Start()
transform.position += new Vector3(speed,0,0)*Time.deltaTime;//движение по оси х с заданием параметра(скорости) через переменную speed
transform.position += new Vector3(1,0,1)*speed*Time.deltaTime;// движение по заданным осям со скоростью установленной переменной speed

вот типа того бы, с пояснениями и дальнейшим развитием их применения
ещё поподробней бы про кватернионы и ейлеры, каким образом кватернион вывести в вектор3
про ригидбоди — нет нигде информации, как ограничивать угол поворота по осям,матф.кламп
как использовать драг по разным осям с разным значением
гравитация и енерция их ограничения и направления,
почему объект в вертикальном положении может подвергаться гравитации а в горизонтальном уже нет..+-

45ˆ
подробного про get set не хватает с примерами, пишут что много чего можно делать, а примеров нет, даже въехать сложно как выжать из него пользу чтобы фантазия стартонула….
учил с++ по Шилдту,3 изд,(в с# (юнити) нету чтоле *и& ?(ссылки, указатели) что то не встречал в скриптах)
так вот чего там нехватает — примеров хотябы с кошками и блошками
тут ещё надо въехать в API, как спаять школьный мелок с мышкой и клавой
а так — ждём продолжения ,всё довольно доходчиво преподносится..

Спасибо за отзыв! Приятно!
Стараюсь поддерживать актуальность сайта по мере сил и возможности.

Отдельное спасибо за темы для новых статей.

Спасибо очень сильно помог, ещё раз большое спасибо.

есть vector3 как взять по нему gameObject?

Здравствуйте. К сожалению никак. Vector3 это структура данных, которая содержит информацию о точках X,Y,Z.
Vector3, как и Vector2 стоит рассматривать наравне с int, string, bool, float..

Например. Контейнер gameObject всегда содержит ссылку на компонент (обязательный) transform.
А transform содержит много свойств, отвечающих за позицию и размер объекта на сцене. Одно из свойств, как раз position — является Vector3.

Через любой компонент можно получить ссылку на gameObject, как и через gameObject можно получить ссылку на любой компонент, который данный gameObject содержит внутри себя.
Например: var boxCollider = gameObject.GetComponent ();
Но Vector3 не является компонентом в Unity3D.

Являются компонентами только те объекты, которые можно добавить к gameObject’у, используя графический интерфейс редактора Unity3D.

Спасибо за хорошо изложенную информацию) Сделал по туторам три простеньких игру, просто повторяя все за автором курса. Но во многое не въехал. Тут почитал, многое встало на свои места сразу. У вас талант к ясному изложению. Не бросайте это дело)

Здравствуйте! Большое спасибо за ваш отзыв
К сожалению сейчас нет особой возможности вести блог.
Но если у вас есть какие-то конкретные вопросы по Unity3D, то я могу с удовольствием на них ответить.

Деактивация Объектов игры.

Объекты могут быть временно удалены из сцены пометив его как неактивный. Это может быть сделано с использованием свойства activeSelf из скрипта или снятием галочки в Инспекторе.

Чекбокс активации Объекта

Эффект деактивации родительского объекта

Когда деактивируется родительский объект также деактивируются все его дети, так что вся иерархия от родителя вниз будет деактивирована. Заметим что на самом деле это не изменяет свойства activeSelf на детях, так что они вернутся в их прежнее состояние когда родитель будет реактивирован. Это значит, что Вы не можете проверить активен ли в действительности объект чтением его свойства activeSelf. Вместо этого нужно использовать свойство activeInHierarchy, которое принимает во внимание эффект деактивации родителей.

Это переопределение поведения было введено в Unity 4.0. В более ранних версиях была функция SetActiveRecursively, которая могла быть использована для активации или деактивации детей объекта. Однако эта функция работала по другому — она меняла активность каждого объекта-ребенка, у которого не было возможности запомнить свое предыдущее состояние. Для поддержания старого кода эта функция осталась в АПИ 4.0, но ее использование не рекомендуется и может быт ьудалено в будующем. В необчеых случаях, когда Вы действительно хотите изменить activeSelf всех детей, Вы можете использовать такой код:-

////////эй уважаемый, activeSelf только для чтения, что вы ему хотите присвоить :)

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *