Unity3D: как сделать коллекцию с подписанными полями, настраиваемую в инспекторе
Использую ScriptableObject для хранения базовых статов типов существ в зависимости от их уровня (прогрессия не линейная) Проблемы начались, когда я начал записывать коэффициент резиста к типам урона: если ужать все 8 "стихий" до одного массива, то получается что-то вот такое:
Входящий урон умножается на значение элемента. 0 - полный игнор, 2 - 200% и т.д.
Но это же вот вообще ни разу не удобно! Что за "Элемент 0"? или "элемент 5"? Можно, конечно, условиться, что 0 - это рубящий, а 7 - огонь, но такое очень просто забыть и напортачить. Поэтому вместо этих вот "Элементов" хотелось бы конкретные подписи: Fire - 1.5, Cold - 0.1
Использовать восемь отдельный полей очень не хочется.
Пытался использовать вместо массива словарь с ключами из enum'a:
enum elem {fire, cold}
Dictionary<elem, float> res = new Dictionary<elem, float>();
Но эта сволочь не сериализуется и чтобы редактировать dict из инспектора надо навешивать кастомный обвес. А я слишком неумный для этого.
Подскажите, пожалуйста, какой тип данных тут использовать для доступной наглядности.
Ответы (1 шт):
Если массив состоит из структур или классов с string полем под именем name или id, то оно будет использоваться инспектором на именования элементов.
Но вообще что-бы код не был хлипким г на соплях. Resistance должен быть не массивом, а объектом, где нет возможности указать сколько там элементов, 8 или 7, а столько сколько есть видов. И запрос должен быть конечно не по абстрактному индексу, а enum типу. Можно написать кастумный инспектор, через Editor или PropertyDrawer для типа Resistance.

