К сожалению, не все так просто: Unity - SerializedProperty имеет множество различных свойств, например, intValue
, floatValue
, boolValue
.
Если вы ищете объектссылаясь на то, что название вашей функции звучит для меня, вы, вероятно, после objectReferenceValue
.
В противном случае вам каким-то образом нужно точно определить, к какому значению вы хотите получить доступ;Я сделал это один раз, передав желаемый тип в качестве второго параметра:
object GetValueByName(Type type, string name)
{
SerializedProperty property = serializedObject.FindProperty(name);
if(type == typeof(int))
{
return property.intValue;
}
else if(type == typeof(float))
{
return property.floatValue;
}
//... and so on
}
Когда мне приходилось использовать метод, мне приходилось только анализировать, например,
int someValue = (int)GetValueByName(typeof(int), "XY");
Если вы хотитепридерживайтесь родового метода вместо возврата object
и разбора, вы также можете проверить typeof(T)
вместо того, чтобы передать его в качестве параметра:
T GetValueByName<T>(string name)
{
SerializedProperty property = serializedObject.FindProperty(name);
Type type = typeof(T);
if(type == typeof(int))
{
return property.intValue;
}
else if(type == typeof(float))
{
return property.floatValue;
}
//... and so on
}
надеюсь, это поможет вам
(пс: если вы предпочитаете использовать switch
- case
вместо кратного if
- else
, см. этот ответ )