Pull to refresh

Comments 11

Так и не понял, зачем нужны ScriptableObject в части про события. А картинка с одним и тем же листенером, навешенным семь раз с разным аргументом, вообще пугает до колик.

Присоединяюсь про листенеры, ужаснуло просто

Спасибо, посмотрю.

а если у меня в ммо 5000 итемов, я что каждую буду так создавать ручками? бред же.
Дефайн 5000 итемов через тхт файл удобнее для дальнейших массовых правок либо добавлений новых параметров
А если каждому предмету понадобится привязать отдельный звук, например, удара меча? Или просто какой-нибудь префаб связать.
Не согласен. Отличным примером грамотного использования подобной архитектуры являются движок Warcraft 3 и Starcraft 1/2. Да никто и не мешает задавать значения в автоматическом режиме через массив данных.
Для массовых правок можно написать кастомный редактор, и изменять ScriptableObject прямо в Unity Editor. Можно сделать, чтобы редактору можно было скормить txt-файл, по которому внесутся нужные изменения. Но, как правильно написали выше, с событиями в статье – полный ужас. Проще было бы реализовать следующее: Sword Merchant каждому своему Sword передаёт ссылку на себя в виде ссылки на ISwordClickListener; Sword по клику (при наличии слушателя) вызывает метод ISwordClickListener.OnSwordClicked, передавая ссылку на свой SwordData. В дальнейшем, если нужны будут разные виды интерфейсов (разные торговцы), можно будет сделать у Sword Merchant свойство со ссылкой на объект, реализующий ISwordClickListener для конкретного случая и так далее.

Хранение параметров айтемов в SO это нормально. Даже если их будет гораздо больше 5000, нужно просто сделать удобный кастомный Editor для этого.
Но с эвентами реально просто дичь. С таким подходом до чистого кода как до луны. И что самое печальное, многие бегинеры могут последовать этому примеру и получить кашу в голове.
В данном случае нужен всего один статический евент с параметром и тогда была бы реально полезная статья.

Будьте внимательны и используйте правильный ассет Sword Data для каждого события OnSwordSelected.

Гораздо проще создать одно событие и передавать Sword Data через аргумент.
Иначе, как уже писали выше для добавления нового элемента придется писать много шаблонного кода.

Планируете переписать последний кусок? С удовольствием посмотрел бы реализацию с нормальной архитектурой
Sign up to leave a comment.

Articles