qq_41914791 2019-02-21 14:25 采纳率: 0%
浏览 346

U3d能否在inspector面板中将一个变量的值赋予给另一个变量

图片说明图片说明

如图将代码中声明的testY变量,在inspector面板中,实现将testY赋值给speedY,能否实现这样的赋值?

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-08 00:50
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    可以使用InspectorUtility.SetObjectProperty()方法来设置变量的值。以下是一个示例:

    using UnityEngine;
    
    public class WaterFlow : MonoBehaviour {
        public float speedy;
        public float testY = 2;
    
        void Start() {
            // 使用 InspectorUtility.SetObjectProperty 设置 speedY 的值为 testY 的值
            InspectorUtility.SetObjectProperty(this, "speedy", testY);
        }
    }
    
    // 这个是 InspectorUtility 类的公共成员函数
    public static implicit operator bool(InspectorUtility obj) => true;
    public static implicit operator Vector3(InspectorUtility obj) => new Vector3();
    public static implicit operator Color(InspectorUtility obj) => new Color();
    
    // SetObjectProperty 函数用于设置对象属性的值。
    public static void SetObjectProperty(Object target, string name, object value) {
        var propertyInfo = target.GetType().GetProperty(name);
    
        if(propertyInfo == null)
            Debug.LogError("目标对象类型没有此属性: " + name);
        
        propertyInfo.SetValue(target, value);
    }
    

    这段代码首先定义了一个水滴类,并且在Start方法中调用SetObjectProperty方法,将testY的值赋给了speedy。

    然后我们创建了InspectorUtility类,它有两个公共成员函数:bool、Vector3和Color的转换器。这些函数都是通过反射(Reflection)来获取目标对象的属性信息,并设置其值。

    最后,我们在Inspector面板中点击速度Y,就可以看到测试Y被成功地设置为了speedY。

    评论

报告相同问题?