Unity学习笔记[1]——属性面板(inspector)访问{get,set}形式的属性

控制Unity Inspector(属性面板)以{get,set}访问属性值的方法——SetProperty

解决方法

着急的孩子请看过来
SetProperty 源库,一键下载到unity项目中即可使用。
https://github.com/LMNRY/SetProperty

关于一件遗憾的事情……

笔者在使用UnityEditor编辑器过程中,遇到了一件非常遗憾的事情。
在一个MonoBehaviour当中,我们经常会用到{get,set}的方式来把一个变量“藏起来”,自定义这个变量的读写方式。操作如下:

public class Bilibili :MonoBehaviour{
	//正常情况下,Unity编辑器会将继承了MonoBehaviour的对象中的公共属性识别到属性面板中。
	//这样一来我们就可以直接在Unity编辑器中编辑这些属性了。
	public int index;
	private float number;
	//从萌新的视角猜测:既然Unity编辑器会将继承了MonoBehaviour的对象中的公共属性识别到属性面板中,
	//那么这个属性是不是也会被Unity识别,放到属性面板(Inspector)中去呢?
	public float Number
	{
		get
		{
			return number;
		}
		private set
		{
			number = Mathf.Clamp01(value);
		}
	}
}

从萌新的视角猜测:既然Unity编辑器会将继承了MonoBehaviour的对象中的公共属性识别到属性面板中,那么使用了{set,get}来声明的公共属性是不是也会被Unity识别,放到属性面板(Inspector)中去呢?笔者撸起袖子兴致冲冲地尝试了……

然而现实非常令人遗憾……


在网上查找了一些资料,最直接的解决办法是这个:
下载并使用 GetProperty 库
在这个项目中其实已经有比较完善的自带范例了。

public class Bilibili : MonoBehaviour{
	[SerializeField, SetProperty("Number")]
	private float number;
	public float Number
	{
		get
		{
			return number;
		}
		private set
		{
			number = Mathf.Clamp01(value);
		}
	}
}

为什么……

  • 为啥使用{get,set}方式声明的属性没办法直接被识别到Inspector里呢?

要笔者大费口舌回答这个问题,其实不如去看看这个解决方案的源代码。这份只有两个函数,长几十行的源代码或许能在十分钟内让你对C#这门编程语言有一个全新的认识(至少笔者是这样的:>=<:)。

你可能感兴趣的:(Unity)