Я знаю, название плохое, но я не мог придумать, что лучше. Вопрос очень конкретный. c.
Хорошо, поэтому я использую в своей игре класс, идентичный классам RPG Skills из примера Odin Inspector. Но он настроен так, как я не совсем понимаю, и я не могу понять, как установить значение (я могу получить его, а есть сеттер , так что можно и установить). Кроме того, все классы / структуры навыков / et c находятся в одном файле .cs.
Функция SkillList, которую я использую для получения значения: (я получаю его с skills[Strength].Value;
в других классах)
public int this[SkillType type]
{
get
{
for (int i = 0; i < this.skills.Count; i++)
{
if (this.skills[i].Type == type)
return this.skills[i].Value;
}
return 0;
}
set
{
for (int i = 0; i < this.skills.Count; i++)
{
if (this.skills[i].Type == type)
{
var val = this.skills[i];
val.Value = value;
this.skills[i] = val;
return;
}
}
this.skills.Add(new SkillValue(type, value));
}
}
Структура SkillValue:
[Serializable]
public struct SkillValue : IEquatable<SkillValue>
{
public SkillType Type;
public int Value;
public SkillValue(SkillType type, int value)
{
this.Type = type;
this.Value = value;
}
public SkillValue(SkillType type)
{
this.Type = type;
this.Value = 0;
}
public bool Equals(SkillValue other)
{ return this.Type == other.Type && this.Value == other.Value; }
}
Перечисление SkillType:
public enum SkillType
{
Science,
Technology,
Arts,
Language,
}
Я пробовал:
skills[Science].Value = 10;
skills[Science] = new SkillValue(Science, 10);
skills[Science, 10];
(с использованием созданной мной новой функции)
skills[Science](10);
skills[Science].Value(10);
skills[Science] = 10;
Но ничего не работает, и теперь я просто гадаю наугад. Как я могу установить значение? Спасибо
Решение: character.skills[Rorschach.Character.Skills.SkillType.Science] = value;