原文地址 :http://www.xuanyusong.com/archives/3406
雨松MOMO 2015年01月13日 于 雨松MOMO程序研究院 发表
get set 使用起来很方便,但是编辑时在Inspector视图中问题就来了,因为get/set的属性即使是public了,但是在Inspector视图中依然不显示。。谷歌一下估计就是下面这样的答案。
![]()
如下图所示问题又来了,因为在编辑模式下修改Width的值,但是代码中的 set 压根就没执行。。
![]()
先看看[SerializeField]的含义,它用来序列化一个区域,通俗的来说[SerializeField]可以让private 的属性在Inspector视图中显示出来。。
那么上面的set没执行的原因就出来了,因为我们改的是private _width并不是 public width。由此可见此段代码在编辑模式下是毫无用处的。。
我偏偏就想在编辑时响应 set 的操作怎么办?我想做的是在set里面加一个自己写的方法。
TestInspector.cs放在Editor目录下
TestInspector.cs放在Editor目录下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
using
UnityEngine
;
using
UnityEditor
;
using
System
.
Collections
.
Generic
;
[
CustomEditor
(
typeof
(
Test
)
)
]
public
class
TestInspector
:
Editor
{
Test
model
;
public
override
void
OnInspectorGUI
(
)
{
model
=
target
as
Test
;
int
width
=
EditorGUILayout
.
IntField
(
"Width"
,
model
.
width
)
;
if
(
model
.
width
!=
width
)
{
model
.
width
=
width
;
}
base
.
DrawDefaultInspector
(
)
;
}
}
|
Test挂在任意游戏对象上。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
using
UnityEngine
;
using
System
.
Collections
;
public
class
Test
:
MonoBehaviour
{
public
int
width
{
get
{
return
_width
;
}
set
{
Debug
.
Log
(
"set :"
+
value
)
;
_width
=
value
;
}
}
private
int
_width
;
}
|