

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


如图将代码中声明的testY变量,在inspector面板中,实现将testY赋值给speedY,能否实现这样的赋值?
以下回答参考 皆我百晓生、券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。
可以使用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。