[Unity] unity3D的序列化及编辑器

查看:1545 |回复:32 | 2015-9-6 14:04:05

您需要 登录 才可以下载或查看,没有账号?注册

x
本帖最后由 醉酒風 于 2019-5-19 12:02 编辑

本文需要对C#的特性概念有一定了解。有关特性见另外一篇文章:Attribute特性
[一]概念
Serialize :序列化,使绑定于游戏对象上的脚本中的可序列化数据可以保存,以及在编辑器中编辑。
Serializable data :可序列化数据,所有如整形字符串枚举等基本数据都是可序列化数据。类和struct需要使用Serializable声明序列化。
[二]相关特性
Serializable:
声明class或者struct为序列化数据。它在JS里是隐式实现的,但是在C#需要自己实现。
例如
[System.Serializable]
public class Item
{
public string name;
public int num;
}
SerializeField:
所有public的可序列化数据都是自动序列化的。而Private的则需要在变量前附加SerializeField特性来序列化。例如。
[SerializeField]
private float myScale;
CustomEditor:
某类的自定义Inspector显示文件。例如
[CustomEditor(typeof(类名))]
public class 任意名: Editor {
void OnInspectorGUI()
{
}
}
CanEditMultipleObjects:
可编辑多个物体,附着在类前。一般和CustomEditor一同使用。
[三]序列化与编辑器拓展
在Unity中序列化的变量类等都可以通过下述方法,快速实现在编辑器中的显示与编辑。
void OnInspectorGUI()
{
//得到其中的序列化类person
SerializedProperty s_person = serializedObject.FindProperty("person");
//通过PropertyField在编辑器中显示
EditorGUILayout.PropertyField(s_person);
//保存变化后的值
serializedObject.ApplyModifiedProperties();
}
[四]实例
实例1:
001iGO8Ggy6M7kLegFx0f&690.jpg MyClass.cs
using UnityEngine;
using System.Collections;
[System.Serializable]
public class Person
{
public string name;
public int age;
}
public class MyClass : MonoBehaviour {
public Person[] person;
[SerializeField]
private float myScale;
}
MyClassInspector.cs
using UnityEngine;
using System.Collections;
using UnityEditor;
[CustomEditor(typeof(MyClass))]
public class MyClassInspector : Editor {
void OnInspectorGUI()
{
SerializedProperty s_person = serializedObject.FindProperty("person");
EditorGUILayout.PropertyField(s_person);
SerializedProperty s_myScale = serializedObject.FindProperty("myScale");
EditorGUILayout.PropertyField(s_myScale);
serializedObject.ApplyModifiedProperties();
}
}
可以试试看,
把MyClass.cs中的第4行去掉,那么Person将不能在Inspector中编辑。
把MyClass.cs中的第13行去掉,那么myScale将不能在Inspector中编辑。
实例2: 位移旋转缩放的重置功能
NGUI有在Inspector中重置位移旋转缩放的功能。下面是一个仿写的简化版。
源自:http://www.siluyouxi.com/game/code/u3d/1344.html

评分

参与人数 1元素币 +10 活跃度 +5 展开 理由
狼之独步 + 10 + 5

查看全部评分

2015-9-6 14:04:05  
 赞 赞 1

使用道具 登录

32个回答,把该问题分享到群,邀请大神一起回答。
2#
元素帖子强,满满正能量!
回复 收起回复
2015-9-6 16:38:46   回复
 赞 赞 1

使用道具 登录

3#
元素那么大,我想来看看!
回复 收起回复
2015-9-6 21:24:18   回复
 赞 赞 1

使用道具 登录

4#
正是本尊想要的!
回复 收起回复
2015-9-6 22:03:59   回复
 赞 赞 1

使用道具 登录

5#
元素帖子强,满满正能量!
回复 收起回复
2015-9-7 09:52:55   回复
 赞 赞 1

使用道具 登录

6#
给力!元素有你更精彩
回复 收起回复
2015-9-8 09:31:50   回复
 赞 赞 1

使用道具 登录

7#
为了元素币,拼了!
回复 收起回复
2015-9-8 14:19:24   回复
 赞 赞 1

使用道具 登录

8#
元素那么大,我想来看看!
回复 收起回复
2015-9-10 10:10:27   回复
 赞 赞 1

使用道具 登录

9#
感谢楼主分享
回复 收起回复
2015-9-10 16:31:02   回复
 赞 赞 1

使用道具 登录

10#
元素帖子强,满满正能量!
回复 收起回复
2015-9-10 16:39:58   回复
 赞 赞 1

使用道具 登录

11#
元素帖子强,满满正能量!
回复 收起回复
2015-9-10 16:39:59   回复
 赞 赞 1

使用道具 登录

12#
带你赚币带你飞,元素里面有正妹!
回复 收起回复
2015-9-11 09:57:26   回复
 赞 赞 1

使用道具 登录

13#
谢谢分享~!支持
回复 收起回复
2018-11-12 09:45:46   回复
 赞 赞 1

使用道具 登录

14#
资源甚好,发帖艰辛,且阅且珍惜!
回复 收起回复
2018-11-12 10:03:41   回复
 赞 赞 1

使用道具 登录

15#
资源甚好,发帖艰辛,且阅且珍惜
回复 收起回复
2018-11-12 10:04:37   回复
 赞 赞 1

使用道具 登录

16#
赞一个~666
回复 收起回复
2018-11-12 10:06:49   回复
 赞 赞 1

使用道具 登录

17#
谢谢分享
回复 收起回复
2018-11-12 10:11:29   回复
 赞 赞 1

使用道具 登录

18#
路过围观,感谢分享~
回复 收起回复
2018-11-12 10:12:14   回复
 赞 赞 1

使用道具 登录

19#
不错的资源,谢谢分享
回复 收起回复
2018-11-12 10:12:25   回复
 赞 赞 1

使用道具 登录

20#

不错的资源,谢谢分享
回复 收起回复
2018-11-12 10:19:54   回复
 赞 赞 1

使用道具 登录

CG 游戏行业专业问题

Unity3D技术手机游戏引擎手游引擎
12下一页
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表