Мои Уведомления
Привет, !
Мой Аккаунт Мои Финансы Мои Подписки Мои Настройки Выход
Руководство API скрипты

Пространство имён

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

В некоторой степени этой проблемы можно избежать, приняв соглашение об именах или переименовывая классы всякий раз, когда обнаруживается конфликт (например, приведенным выше классам можно давать такие имена, как PlayerController и EnemyController). ). Однако это проблематично, когда есть несколько классов с конфликтующими именами или когда переменные объявлены с использованием этих имен — каждое упоминание старого имени класса должно быть заменено для компиляции кода.

Язык C# предлагает функцию под названием пространства имен, которая надежно решает эту проблему. Пространство имен — это просто набор классов, на которые ссылаются с помощью выбранного префикса имени класса. Дополнительные сведения см. в документации Microsoft по пространствам имен.

В приведенном ниже примере классы Controller1 и Controller2 являются членами пространства имен с именем Enemy:

namespace Enemy { public class Controller1 : MonoBehaviour { ... } public class Controller2 : MonoBehaviour { ... } }

В коде эти классы называются Enemy.Controller1 и Enemy.Controller2 соответственно. Это лучше, чем переименование классов, поскольку объявление пространства имен может быть заключено в квадратные скобки вокруг существующих объявлений классов (т. е. нет необходимости изменять имена всех классов по отдельности). Кроме того, вы можете использовать несколько разделов пространства имен в квадратных скобках вокруг классов, где бы они ни встречались, даже если эти классы находятся в разных исходных файлах.

Вы можете избежать повторного ввода префикса пространства имен, добавив директиву using вверху файла.

using Enemy;

Эта строка указывает, что там, где встречаются имена классов Controller1 и Controller2, они должны означать Enemy.Controller1 и Enemy.Controller2 соответственно. Если скрипт также должен ссылаться на классы с тем же именем из другого пространства имен (скажем, с именем Player), префикс все равно можно использовать. Если два пространства имен, содержащие конфликтующие имена классов, одновременно импортируются с помощью директив using, компилятор сообщит об ошибке.

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

Unity выдает в консоли следующее предупреждение: Класс MyClass не может существовать в нескольких пространствах имен в одном файле, даже если одно из них исключено директивами препроцессора. Пожалуйста, переместите их в отдельные файлы, если это так.

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

Вы можете отблагодарить автора, за перевод документации на русский язык. ₽ Спасибо
Руководство Unity 2021.3