Как отключить скрипт на объекте unity
Перейти к содержимому

Как отключить скрипт на объекте unity

  • автор:

Создание и Использование Скриптов

Поведение игровых объектов контролируется с помощью компонентов (Components), которые присоединяются к ним. Несмотря на то, что встроенные компоненты Unity могут быть очень разносторонними, вскоре вы обнаружите, что вам нужно выйти за пределы их возможностей, чтобы реализовать ваши собственные особенности геймплея. Unity позволяет вам создавать свои компоненты, используя скрипты. Они позволяют активировать игровые события, изменять параметры компонентов, и отвечать на ввод пользователя каким вам угодно способом.

Unity supports the C# programming language natively. C# (pronounced C-sharp) is an industry-standard language similar to Java or C++.

In addition to this, many other .NET languages can be used with Unity if they can compile a compatible DLL — see here for further details.

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

Создание скриптов

Unlike most other assets, scripts are usually created within Unity directly. You can create a new script from the Create menu at the top left of the Project panel or by selecting Assets > Create > C# Script from the main menu.

Новый скрипт будет создан в папке, которую вы выбрали в панели Project. Имя нового скрипта будет выделено, предлагая вам ввести новое имя.

Лучше ввести новое имя скрипта сразу после создания чем изменять его потом. Имя, которое вы введете будет использовано, чтобы создать начальный текст в скрипте, как описано ниже.

Структура файла скрипта

When you double-click a script Asset in Unity, it will be opened in a text editor. By default, Unity will use Visual Studio, but you can select any editor you like from the External Tools panel in Unity’s preferences (go to Unity > Preferences).

Содержимое файла будет выглядеть примерно так:

using UnityEngine; using System.Collections; public class MainPlayer : MonoBehaviour < // Use this for initialization void Start () < >// Update is called once per frame void Update () < >> 

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

Основные вещи, достойные внимания, это две функции, определенные внутри класса. Функция Update — это место для размещения кода, который будет обрабатывать обновление кадра для игрового объекта. Это может быть движение, срабатывание действий и ответная реакция на ввод пользователя, в основном всё, что должно быть обработано с течением времени во игровом процессе. Чтобы позволить функции Update выполнять свою работу, часто бывает полезно инициализировать переменные, считать свойства и осуществить связь с другими игровыми объектами до того, как будут совершены какие-либо действия. Функция Start будет вызвана Unity до начала игрового процесса (т.е. до первого вызова функции Update), и это идеальное место для выполнения инициализации.

Заметка для опытных программистов: вы можете быть удивлены, что инициализация объекта выполняется не в функции-конструкторе. Это потому, что создание объектов обрабатывается редактором и происходит не в начале игрового процесса, как вы могли бы ожидать. Если вы попытаетесь определить конструктор для скриптового компонента, он будет мешать нормальной работе Unity и может вызвать серьезные проблемы с проектом.

Управление игровым объектом

Как было сказано ранее, скрипт определяет только план компонента и, таким образом, никакой его код не будет активирован до тех пор, пока экземпляр скрипта не будет присоединен к игровому объекту. Вы можете прикрепить скрипт перетаскиванием ассета скрипта на игровой объект в панели Hierarchy или через окно Inspector выбранного игрового объекта. Имеется также подменю Scripts в меню Component, которое содержит все скрипты, доступные в проекте, включая те, которые вы создали сами. Экземпляр скрипта выглядит так же, как и другие компоненты в окне Inspector:-

После присоединения скрипт начнет работать, когда вы нажмете Play и запустите игру. Вы можете проверить это добавив следующий код в функцию Start:-

// Use this for initialization void Start ()

Debug.Log is a simple command that just prints a message to Unity’s console output. If you press Play now, you should see the message at the bottom of the main Unity editor window and in the Console window (menu: Window > General > Console).

  • 2018–03–19 Page amended
  • MonoDevelop replaced by Visual Studio from 2018.1

Как получить ссылку / добавить / отключить / удалить компонент из скрипта

Приветствую начинающих разработчиков Unity. В данной статье мы рассмотрим сразу четыре возможности, которые можно реализовать с компонентами объекта, через скрипт, а именно: получение ссылки на компонент, добавление компонента, отключение компонента и удаление компонента.

Давайте пройдёмся по порядку.

Получение ссылки на компонент

Предположим, у нас имеется переменная obj, которая хранит в себе ссылку на наш объект. И нам необходимо получить ссылку на компонент данного объекта, например, на компонент Rigidbody. Для этого воспользуемся методом GameObject.GetComponent.

Rigidbody _rb = obj.GetComponent(); 

Тепер в переменной _rb у нас имеется ссылка на компонент Rigidbody, объекта obj. Так же убедитесь в том, что компонент, на который вы хотите получить ссылку, добавлен к Вашему объекту, иначе данный код работать не будет.

Добавление компонента

Как и в предыдущем примере, предположим, у нас имеется переменная obj, которая хранит в себе ссылку на наш объект.

Там нам необходимо добавить компонент для нашего объекта. Для этого нам понадобится метод GameObject.AddComponent. Воспользуемся им, добавив компонент, например, Rigidbody:

Rigidbody _rb = obj.AddComponent();

Готово! К объекту obj мы добавили компонент Rigidbody, и в переменную _rb записали ссылку для её хранение. Но на самом деле хранить ссылку на добавленный компонент не обязательно, поэтому, Вы можете обойтись и без этого.

Отключение компонента

Отключение и включение компонента используется довольно часто, для временного отключения или включения его свойств.

Предположим, что у Вас имеется переменная _rb, которая хранит в себе ссылку на какой-либо компонент.

У любого компонента имеется свойство enabled, которое принимая значения true и false, включает и отключает компонент соответственно. Воспользуемся им:

_rb.enabled = true;

Данный код отключит Ваш компонет. А чтобы его опять включить, поменяйте значение true на false.

_rb.enabled = false;

Удаление компонента

Удаление компонента, пожалуй, самое простое из всех тем этой статьи. За удаление компонента отвечает метод Destroy.

Destroy(_rb);

Так же убедитесь, что в переменной _rb имеется ссылка на Ваш компонент, который Вы хотите удалить.

На этом всё, теперь Вы умеете работать с компонентами 🙂 Если остались вопросы, задавайте их в комментариях.

Как отключить часть кода в скрипте unity c#

Мне нужно ,что бы сама unity не могла вызывать OnTriggerEnter, я хочу сделать удобный способ выбора/фильтрации в инспекторе ,для того ,что бы на моих 1000 объектах вызывалась только одна из 3 проверок OnTriggerEnter/OnTriggerExit/OnTriggerStay . Возможно это невозможно и мне придётся просто создать 3 скрипта .

7 ноя 2021 в 0:56

Вас спасет наследование. ООП же знаете. Создайте базовый класс, унаследуйте от него другие скрипты. Не придется писать одинаковый код.

Как отключить скрипт на объекте unity

Текущее время: 01 май 2024, 19:06

Как остановить/выйти из скрипта?

Форум для самых маленьких, а так же тех, кому недосуг читать справку самостоятельно.
Сообщений: 9 • Страница 1 из 1

Как остановить/выйти из скрипта?

Unitis 04 янв 2016, 20:52

Имеется несколько одинаковых префабов с разными именами, которые содержать скрипты. Требуется отключить скрипт если имя префаба = «abcde». Что-то честно сказать в замешательстве как это сделать.
Были идеи прописать return в начале update() и FixedUpdate() (после проверки имени) чтобы прекратить выполнение и выйти из функции. Но, вариант, как я понимаю, не совсем оптимальный.

Unitis UNITрон Сообщения: 151 Зарегистрирован: 20 ноя 2013, 19:30

Re: Как остановить/выйти из скрипта?

samana 04 янв 2016, 21:21

Так скрипт на объекте — это компонент, а компонент можно включать и выключать (enable=true/false)
https://unity3d.com/ru/learn/tutorials/ . components

samana Адепт Сообщения: 4738 Зарегистрирован: 21 фев 2015, 13:00 Откуда: Днепропетровск

Re: Как остановить/выйти из скрипта?

Cr0c 04 янв 2016, 21:37

Unitis писал(а): Требуется отключить скрипт если имя префаба

Вы хотите отключать скрипт на всех клонах префабов?

Cr0c Адепт Сообщения: 3035 Зарегистрирован: 19 июн 2015, 13:50 Skype: cr0c81

Re: Как остановить/выйти из скрипта?

samana 04 янв 2016, 21:39

Cr0c писал(а):
Unitis писал(а): Требуется отключить скрипт если имя префаба

Вы хотите отключать скрипт на всех клонах префабов?

Если так, то лучше уж удалить скрипт из префаба изначально.

samana Адепт Сообщения: 4738 Зарегистрирован: 21 фев 2015, 13:00 Откуда: Днепропетровск

Re: Как остановить/выйти из скрипта?

Unitis 04 янв 2016, 21:51

Cr0c писал(а): Вы хотите отключать скрипт на всех клонах префабов?

Нет. Только на префабе с определенным именем. И за это должен отвечать сам скрипт.

Шаг 1. Узнать на какой копии префаба повешен данный скрипт путем проверки его имени.
Шаг 2. Если проверка дала true, имя верно, то отключить скрипт или немедленно из него выйти.

Скрипт должен работать избирательно и в зависимости от того, на какой объект он повешен.

Unitis UNITрон Сообщения: 151 Зарегистрирован: 20 ноя 2013, 19:30

Re: Как остановить/выйти из скрипта?

Cr0c 04 янв 2016, 21:58

Unitis писал(а):
Cr0c писал(а): Вы хотите отключать скрипт на всех клонах префабов?

Нет. Только на префабе с определенным именем. И за это должен отвечать сам скрипт.

Согласно механики юнити, все действия с префабом применяются ко ВСЕМ его клонам, а значит отключение скрипта на префабе отключит его на всех клонах.
В самом скрипте это реализовать не получится? Кто проверяет условие выключения скрипта?

Cr0c Адепт Сообщения: 3035 Зарегистрирован: 19 июн 2015, 13:50 Skype: cr0c81

Re: Как остановить/выйти из скрипта?

BOGZOERT 05 янв 2016, 20:47

Ребят, а как тогда остановить скрипт или его строчку на определённое время, после выполнения?
BOGZOERT UNец Сообщения: 1 Зарегистрирован: 27 авг 2015, 20:07

Re: Как остановить/выйти из скрипта?

Unitis 07 янв 2016, 02:25

Unitis писал(а): Согласно механики юнити, все действия с префабом применяются ко ВСЕМ его клонам, а значит отключение скрипта на префабе отключит его на всех клонах.

Интересное утверждение. Но ведь скрипт сам будет способен выбирать когда ему «отключаться» в зависимости от того на каком объекте он находится. Под отключением скрипта конечно подразумевается частичная или полная остановка его работы. Скрипт самостоятельно идентифицирует своего владельца и затем решает продолжать ли своё выполнение или нет.

Вопрос в большей степени кроется в реализации.

Unitis UNITрон Сообщения: 151 Зарегистрирован: 20 ноя 2013, 19:30

Re: Как остановить/выйти из скрипта?

zomgzufall 07 янв 2016, 05:55

Есть гейм объекты а есть префабы, на гейм объектах можно отключать независимо друг от друга все что угодно, а отключение чего то на префабе этих гейм объектов повлечет за собой отключение и на самих объектах тоже.
Реализация очевидна, если нужно отключить на чем то одном, то либо найти этот объект и отключить, либо выключить еще при создании объекта. Либо проверить свое имя, и выключить на себе если оно == «asdasd».

Если судить по абсурдности вопроса, думаю автор создает разные гейм объекты из одного префаба, и хочет отключить скрипт лишь на определенном ГО на сцене, а сам выключает на префабе.

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

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