На данный момент делаю ядро своей системы. Суть в том, чтобы получать данные из xml (координаты объекта, тип, различные состояния, команды(атаковать например) и тд), загружать объекты на сцену в зависимости от пришедших данных и выполнять определенные действия над ними.
Сейчас делаю так:
Есть один базовый скрипт в котором будут содержаться общие поля для всех объектов, которые заполняются из xml-ки, а в update методе реализовываю что-то вроде менеджера, который будет опрашивать модуль разбора xml и реализовывать логику работы.
Также есть скрипты для каждого класса объектов которые будут использоваться в системе(отдельный для техники, отдельный для людей, может быть еще в дальнейшем появятся новые объекты), в которых описываю все методы которые будут реализовываться конкретным объектом.
Вот для примера два скрипта Их я вешаю на пустой game object
1. для объекта
На практики сразу уперся в проблему.
Допустим я хочу реализовать следующие, когда объект неподвижен мы отключаем ему систему частиц (дым), а когда двигается включаем.
Ну очевидно необходимо ввести флаг, который бы следил за скоростью объекта и когда он true включаем частицы. Или же например нужно у объекта выставить
Синтаксис:
Используется csharp
Используется csharp rigidbody.velocity = Vector3.zero;
Если мы введем этот флаг конкретно в первом скприпте описывающий объект, то когда он будет true включится дым у всех объектов, следовательно нужно чтобы у каждого объекта был такой флаг, тк разные объекты находятся в разных состояниях(одни движутся одни стоят). Сейчас подумал, скорость же тоже разная будет у всех объектов, так что опять же нет смысла делать это поле одно для всех. Ведь при запуске это поле будет только у пустого объекта на кторый мы повесили скрипты, а у тех объектов, что создаются на лету полей не будет вообще.
Мне видятся пока только два варианта:
1 Первый уже опробовал: создал новый скрипт, в котором завел переменную скорость и повесил его на префаб, тогда действительно, когда объект создается на сцене, у каждого имеется в инспекторе своя переменная скорость. Но если использовать эту скорость для метода Move (из класса описывающий этот объект), то вылазят ошибки(не помню какая, могу уточнить).
2. Сделать класс описывающий объект не наследником от MonoBehaviour, в котором описать этот объект и в конструкторе описать все переменные которые он должен иметь и ссылку на GameObject для их взаимосвязи.
Опять же что-то подобное раньше делал, но вроде бы, тогда у создаваемых объектов все-равно нет в инспекторе этих полей принадлежащих конкретно этому объекту, а есть только у пустого объекта на которые мы вешаем наши скрипты.