Невозможно использовать Unity-скрипт без расширения MonoBehaviour

James Monger спросил: 28 марта 2018 в 04:41 в: c#

Я создал сценарий Unity C #, который я хочу использовать для хранения данных для объектов, к которым он привязан.

Класс имеет только два поля и не имеет никакого поведения. Поскольку в нем нет никакого поведения, нет необходимости расширять MonoBehaviour.

В идеале я бы вообще ничего не хотел распространять, но я также попытался расширить Behaviour (который MonoBehaviour расширяется), и в обоих случаях я получаю следующую ошибку в боковой панели скрипта:

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

Возможно ли, чтобы я мог прикреплять скрипт к объекту без расширения этого скрипта MonoBehaviour?


2 ответа

Есть решение
Jesus Alonso Abad ответил: 28 марта 2018 в 09:05

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

В моем Мнение, что хорошо иметь "класс сущности", прикрепленный к вашему игровому объекту. Хотя обычно и данные, и их поведение должны объединяться, иногда вы можете настроить свою игру / приложение на наличие объекта-посредника, который обращается к свойствам других объектов. Например, агент ИИ, который проверяет точки здоровья ближайших врагов, выбирает самого слабого. Так что, если вы чувствуете, что нужно добавить скрипт для добавления данных в игровые объекты, сделайте это, даже если это означает расширение MonoBehaviour.

Draco18s ответил: 29 марта 2018 в 05:39
Обратите внимание, что накладные расходы для MonoBehaviour в основном заключаются в магических методах, которые есть в MonoBehaviours: Unity должна проверить их класс, и, если они найдены, при их вызове возникают накладные расходы. Но это действительно имеет значение только для Update(). Если у вас нет Update() (даже пустого!), Тогда издержки практически равны нулю.
Chik3k3r ответил: 28 марта 2018 в 08:45

Нет, вы не можете добавлять сценарии в объекты GameObject, если они не расширяют MonoBehaviour

Draco18s ответил: 29 марта 2018 в 05:36
Не полностью правда. Вместо этого вы можете расширить Behaviour или Component. Оба суперкласса MonoBehaviour имеют разные уровни функциональности. Например. Transform является компонентом, а Canvas является Behaviour