Unity 将序列化属性转换为泛型

Unity Convert SerializedProperty To Generic

我正在尝试创建一个函数,该函数通过字符串路径获取 SerializedProperty,然后将其转换为通用类型,然后 returns。我尝试了很多解决方案,它们要么给出空引用异常,要么给出无效转换。我根本不知道该怎么做。那么有人可以帮助我吗?谢谢! 顺便说一句,这是到目前为止的功能:

T GetObjectProperty<T>(string propertyPath)
{
    SerializedProperty property = serializedObject.FindProperty(propertyPath);



}

不幸的是,它并没有那么简单: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) 而不是 ps 将其作为参数:

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

}

希望这个帮助ps你


(ps:如果您更喜欢使用 switch-case 而不是多个 if-else,请参考 this answer )