zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    常用正则表达式
    C语言的指针与二维数组
    【原创】datalist实现简单分页功能
    【原创】datalist的页脚访问和控制
    [原创]手动删除顽固病毒总结
    [zz]复杂指针解析
    极度郁闷的一次电脑维修经历
    武汉城市地铁规划图
    [转]objc_msgSend 的 ARM 汇编分析
    [转]Cydia and XCode Local App Testing
  • 原文地址:https://www.cnblogs.com/luxishi/p/6397957.html
Copyright © 2011-2022 走看看