должен уметь влиять и создавать элементы
и вот условно я делаю такой скилл который создаёт стенку и делает её выше каждый кадр, но логинчый вопрос, а как мне влиять на объект постепенно если у скриптбл обджектов нет FixedUpdate или Update?
В SO не должна храниться логика - они необходимы для хранения данные. В твоём случае это может быть размер, иеш, скорость появления Я бы поместил такие SO в SeralizableField на спелл кастере и уже из скрипта пользовался бы всей необходимой информацией, как если бы это было обычное поле. Но можно и инстанциировать SO по аналогии с префабом (CreateInstance) и на создании спелл кастера присваивать необходимый стек заклинаний.
не совсем понял, у меня ща так получается что спелл хранит в себе префаб который он может спавнить я могу по идее передавать все данные объекту а он сам уже будет делать своё дело, но разве это не дублирование кодаГ?
Логику создания префаба у Вас будет содержать монобех, а данные (в том числе префаб) поместите в SO
Это разделение ответственности, удобное управление статический информацией из одного места в редакторе.
то есть: SO имеет данные о скорости роста, позиции с которой нужно расти и префаб который нужно генерить Prefab знает как ему расти что ему делать, но ожидает что данные получит от скрипта?
Absolutely right Это очень удобно. Не нужно создавать миллион префаба, например, для разных уровней заклинания. Достаточно несколько однотипных SO, которые легко создаются в эдиторе. Плюсом и лучшее управление памятью, и гибкость системы.
ты смотришься как супер опытный чел могу ещё спросить по-поводу кулдаунов у меня каждый скилл это скрипбл обджект который имеет кулдаун (кулдаун это структура с maxCooldown, currentCooldown) и мне нужно как-то считать этот кулдаун, но по скольку у скриптбл обджекта опять же нет фиксед апдейтов, а я хз норм ли таймерами обычными считать я подумал привязаться на какой-то глобальный таймер, но как на самом деле правлиьно делать?
Если ещё актуально. В монобех, который отвечает за каст заклинания делаешь метод, запускающий корутину. В корутину while(isCooldown == false) isCooldown = true; CastSpell(); yield return new WaitForSeconds(_cooldownInSeconds) ; IsCooldown = false; Этот метод похож на кастомный Update, но контролируемый. StartCoroutine возврашаемым значением имеет корутину, сохрани её, когда будешь стартовать, чтобы потом из другого метода сделать StopCoroutine().
а зачем тут while?
Чтобы кастовать заклинания в цикле, но с условием, что сейчас не -Cooldown. Снаряд выпустился Код из корутины вышел и вернётся сюда после времени кулдауна Кулдаун сбросится, while сработает снова, снова каст
Это подойдет только если нужен автокаст скилла
Обсуждают сегодня