Unity编辑器环境在Inspector面板中显示变量
Serialize功能
Unity3D 中提供了非常方便的功能可以帮助用户将 成员变量 在Inspector中显示,并且定义Serialize关系。
简单的说,在没有自定义Inspector的情况下所有显示在Inspector 中的属性都同时具有Serialize功能。
换句话说,就是你在Inspector看到什么,保存游戏的时候,这些值就会被保存成二进制文件。
本文说说可被Serialize的变量的定义方法
1. public 变量
在没有加入任何Attribute的前提下,public变量是默认被视为可以被Serialize的。所以public声明的变量在Inspector面板中是可见的。
public int MaxExp;
2. [SerializeField] Attribute
强制unity去序列化一个私有域
这是一个内部的unity序列化功能,有时候我们需要Serialize一个private或者protected的属性,这个时候可以使用[SerializeField]这个Attribute:
[SerializeField]
protected int foobar = 0;
注意: 这样定义出的成员变量也是会在Inspector中显示出来。
在Unity最新的UI系统中,UI属性上方全部添加[SerializeField] ,如下所示
[SerializeField]
private int ID;

3. 单独的class或struct
Serializable是.Net自带的序列化
有时候我们会自定义一些单独的class/struct, 由于这些类并没有从 MonoBehavior 派生所以默认并不被Unity3D识别为可以Serialize的结构。自然也就不会在Inspector中显示。我们可以通过添加 [System.Serializable]这个Attribute使Unity3D检测并注册这些类为可Serialize的类型。具体做法如下:
[System.Serializable]
public class FooBar {
public int foo = 5;
public int bar = 10;
}
注意:Serializable只可以对class,struct,enum,delegate进行序列化,不可以对属性序列化

4. ScriptableObject
ScriptableObject 类型经常用于存储一些unity3d本身不可以打包的一些object,比如字符串,一些类对象等。用这个类型的子类型,则可以用BuildPipeline打包成assetbundle包供后续使用,非常方便,具体请参考 [cb]ScriptableObject 序列化
NonSerialize的变量的定义方法
4.1. protected, private, internal 变量
默认情况下,protected, private, internal变量将不会被serialize.
4.2. [System.NonSerialized] Attribute
有时候我们需要定义一些public变量方便操作,但是又不希望这些变量保留。这个时候可以利用[System.NonSerialized]来完成这个操作:
[System.NonSerialized] public float foobar = 1.0f;
4.3. readonly, const, static 修饰符
如果变量加入了readonly, const, static等修饰符,无论他的serialize设置如何,都将不会进行serialize
4.4. Dictionary
关于Dictionary在Inspector面板的显示一直是个难题,这里推荐大家用一款插件来解决
Odin - Inspector and Serializer 2 游戏序列化插件

只需要脚本从继承MonoBehaviour改为 SerializedMonoBehaviour 即可,
显示效果非常的完美
Unity编辑器环境在Inspector面板中显示变量的更多相关文章
- 4. 在Inspector面板中显示类中变量+ 拓展编辑器
1. C#脚本如下: using UnityEngine; using System.Collections; public class MyTest : MonoBehaviour { ; ; [S ...
- Unity3D:Text在Inspector面板中中无法显示,需转换成UTF-8格式
环境:Win10 读取text内容后unity报错:Input string was not in the correct format 同时在Inspector面板中无法预览Text文本内容 随后发 ...
- winform 自定义控件属性在属性面板中显示
Jan.David Nothing is impossible, the word itself says 'I'm possible'!" — Audrey Hepburn winform ...
- unity编辑器扩展_01(在工具栏中创建一个按钮)
代码: [MenuItem("Tools/Test",false,1)] static void Test() { Debug.Log("tes ...
- unity编辑器扩展_03(在组件中右击创建一个选项,并通过该选项修改该组件下面的字段的值)
在组件中右击创建一个选项代码: [MenuItem("CONTEXT/PlayerHealth/InitHealth")] static void Test5() { ...
- Unity编辑器重写Inspector面板,面板中编辑的数据不触发场景发生变化的问题。
今天开始协助主程一起制作新框架.主程让我写关于新版UI框架注册UI预制体用的快捷编辑器. 现学现写,总算完成了. 可以直接把选中的预制体添加到UIController的数组中,期间涉及到改变大小.所以 ...
- [译]如何在Unity编辑器中添加你自己的工具
在这篇教程中你会学习如何扩展你的Unity3D编辑器,以便在你的项目中更好的使用它.你将会学习如何绘制你自己的gizmo,用代码来实现创建和删除物体,创建编辑器窗口,使用组件,并且允许用户撤销他们所作 ...
- Unity编辑器扩展 Chapter7--使用ScriptableObject持久化存储数据
Unity编辑器扩展 Chapter7--使用ScriptableObject持久化存储数据 unity unity Editor ScirptableObject Unity编辑器扩展 Chapt ...
- Unity3d Inspector面板实现set/get访问器
简单说一下属性和字段的区别:字段就是成员变量,而属性确实提供给外部访问内部成员变量的接口.之所以会有属性的出现,就是为了避免外部对类的成员的直接访问,通俗的说就是OOP中的封装思想. using Un ...
随机推荐
- Jenkins配置Publish Over SSH讲解说明
原创 Jenkins配置Publish Over SSH讲解说明 2018-08-22 11:59:30 M.Blog 阅读数 3764更多 分类专栏: Jenkins 版权声明:本文为博主原创文 ...
- simpleDateFormat中格式化时间需要注意的问题
student.getDateProperty("business","birth","yyyy-MM-dd",null)测试时 时间格式 ...
- IAR8.X安装教程
安装教程 1.下载 2.安装 3.和谐 1.下载 打开官网 找到要下载的版本3. 下载8.4下载地址 不支持中文路径,有点坑https://netstorage.iar.com/SuppDB/Pro ...
- FSMN 及其变种 cFSMN DFSMN pyramidal-FSMN
原文: https://blog.csdn.net/qq_26778411/article/details/89682447 也可以参考: http://vsooda.github.io/2018/ ...
- ACM算法模板 · 一些常用的算法模板-模板合集(打比赛专用)
ACM算法模板 · 一些常用的算法模板-模板合集(打比赛专用)
- java基础(9)---静态方法和成员方法
一.方法: 方法的区别: 静态方法:有static方法 成员方法:没有static方法 方法的定义: 方法的调用:类.静态方法,对象.成员方法 一个MyClass类包含静态方法和成员方法: 静态方 ...
- 【Java】Unicode & UTF-8 & UTF-16 & UTF-32
Unicode Unicode(统一码.万国码.单一码)是计算机科学领域里的一项业界标准,包括字符集.编码方案等.Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设 ...
- flask框架下读取mysql数据 转换成json格式API
研究了一天 因为需要从数据库拿数据然后转换成json的格式 expose出去为 API 发现一条数据是容易,两条以上我居然搞了这么久 好歹出来了 先贴一下 后面更新 mysql的操作 比较容易了htt ...
- 完成一个springboot项目的完整总结------三
这一次的总结是最关键的部分,主要涉及了ORM的三种操作,这些操作是项目的难点,三种操作包括多对一.多对多.一对多三种模式,接下来展示项目代码 1.多对一 clazz表对应grade表和charge表 ...
- Dubbo源码分析(3):ExtensionFactory
通过ExtensionFactory的getExtension方法获取目标对象.ExtensionFactory实现有两个,一个基于SPI的,一个Spring的ApplicationContext的. ...