Unity3D研究院之Inspector视图中的get/set使用
get set 使用起来很方便,但是编辑时在Inspector视图中问题就来了,因为get/set的属性即使是public了,但是在Inspector视图中依然不显示。。谷歌一下估计就是下面这样的答案。
public int width
{
get {
return _width;
}
set {
_width = value;
}
}
[SerializeField]
private int _width;
如下图所示问题又来了,因为在编辑模式下修改Width的值,但是代码中的 set 压根就没执行。

先看看[SerializeField]的含义,它用来序列化一个区域,通俗的来说[SerializeField]可以让private 的属性在Inspector视图中显示出来。。
那么上面的set没执行的原因就出来了,因为我们改的是private _width并不是 public width。由此可见此段代码在编辑模式下是毫无用处的。。
我偏偏就想在编辑时响应 set 的操作怎么办?我想做的是在set里面加一个自己写的方法。
TestInspector.cs放在Editor目录下
Test挂在任意游戏对象上。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor; [CustomEditor(typeof(Test))]
public class MyEditor : Editor { public override void OnInspectorGUI()
{
Test model = target as Test;
int width= EditorGUILayout.IntField("Width",model.mWidth);//先读取私有变量的值
model.mWidth = width;//再将值赋予公有变量,就调用了set了。
base.DrawDefaultInspector();
}
}
如下图所示,在编辑模式下用鼠标修改width的值。 log输出了说明 get set 已经响应了。

感谢下面好友的留言,另外一种实现的方式,我试了一下也很好用。
https://github.com/LMNRY/SetProperty
Unity3D研究院之Inspector视图中的get/set使用的更多相关文章
- 最近遇到的几个问题,关于Unity脚本在Inspector视图中前面没有勾选框的问题
1.为什么在Inspector视图中有的脚本前面有勾选框,有的脚本前面没有? 当我想要禁用一个脚本时,发现脚本前面没有勾选框,有的却有. 解决办法:在脚本中添加start方法,然后就有勾选框了. 原因 ...
- Unity3D研究院之为什么Inspector视图中脚本前面的勾选框没了
我一个同事刚问我为啥有时候脚本的勾选项没有了?有时候不想让某条脚本执行,可以直接在编辑器中点掉勾选按钮即可.如下图所示 以前我也遇到过这个问题,但是一直都没怎么注意,因为一般情况下也用不到.今天刚好有 ...
- Unity3D研究院之Inspector面板枚举的别名与排序
虽然mono是支持unicode的.可以在枚举里写中文,但是我还是觉得写英文好一些.可是在编辑器上策划是希望看到的是中文的,还有就是枚举的展示排序功能,策划在编辑的时候为了方便希望把常用的枚举排上前面 ...
- Inspector视图中的get/set使用
using UnityEngine; using System.Collections; public class Test : MonoBehaviour { public int width { ...
- UNITY5 为什么Inspector视图中脚本前面的勾选框没了
结果发现了一个奇葩的问题..凡事脚本没有勾选项的,都是因为你的脚本没有Start方法..如果你想让勾选框显示出来,把如下方法加入即可,不信你可以试试.嘿嘿.
- Unity3D研究院之动态修改烘培贴图的大小&脚本烘培场景
Unity默认烘培场景以后每张烘培贴图的大小是1024.但是有可能你的场景比较简单,用1024会比较浪费.如下图所示,这是我的一个场景的烘培贴图,右上角一大部分完全是没有用到,但是它却占着空间. 有 ...
- Unity3D研究院之拓展Scene视图
Scene视图是编辑游戏模型的地方,其实它还可以进行编辑.如下图所示,我给Scene视图做了简单的编辑. Scene视图的拓展是基于对象的,意思就是你必须在Hierarchy视图中选择一个对象才行.H ...
- (转)Unity3D研究院之手游开发中所有特殊的文件夹(assetbundle与Application.persistentDataPath)
这里列举出手游开发中用到了所有特殊文件夹. 1.Editor Editor文件夹可以在根目录下,也可以在子目录里,只要名子叫Editor就可以.比如目录:/xxx/xxx/Editor 和 /Edi ...
- Unity3D研究院之手游开发中所有特殊的文件夹
这里列举出手游开发中用到了所有特殊文件夹. 1.Editor Editor文件夹可以在根目录下,也可以在子目录里,只要名子叫Editor就可以.比如目录:/xxx/xxx/Editor 和 /Edi ...
随机推荐
- java中 文件压缩处理
public static void main(String[] args) throws IOException { File file=new File("./mhxx_configs. ...
- JMeter部分功能详解
JMeter 介绍: 一个非常优秀的开源免费的性能测试工具. 优点:你用着用着就会发现它的重多优点,当然不足点也会呈现出来. 从性能工具的原理划分: Jmeter工具和其他性能工具在原理上完全一致,工 ...
- Jackson是线程安全的吗
网上说是线程安全的,内部代码用了ThreadLocal.Synchronized这些线程安全类和关键字,可以放心的用. 避免每次使用都new一个,全局配置一个ObjectManager的对象将大大减少 ...
- nginx 启动,重启,添加开机启动等相关命令
nginx -t 测试 配置文件是否正确,同时可以查看配置文件路径 nginx -c /usr/local/nginx/conf/nginx.conf 启动nginx ps -ef|grep ng ...
- Exception:System.Threading.SemaphoreFullException
ylbtech-Error-Exception-C#: System.Threading.SemaphoreFullException 1.A,异常类型返回顶部 1,异常名称System.Thr ...
- hibernate save update merge 区别
1.save save的对象是临时对象,首先将对象写入缓存,使其变为持久对象. save函数底层使用的是Insert语句,因此如果数据库中已经存在相同ID的记录,那么会报错 2.update upda ...
- mysql数据库查看各实例磁盘占用情况
1.总体查看: use information_schema; select TABLE_SCHEMA, concat(truncate(sum(data_length)/1024/1024,2),' ...
- vue-cli配置文件详解
转自: https://blog.csdn.net/Mr_YanYan/article/details/79233188
- Theano学习笔记(四)——导数
导数使用T.grad计算. 这里使用pp()打印梯度的符号表达式. 第3行输出是打印了经过优化器简化的符号梯度表达式,与第1个输出相比确实简单多了. fill((x** TensorConstant{ ...
- java 中 instanceof 和 isInstance区别
两者的功能是等价的.区别: 1.instanceof 是一个操作符(类似new, ==等): 使用方法: if (ins instanceof String) { //logic } 2.isInst ...