ScriptableObject的用法
来源:互联网 发布:华资软件技术有限公司 编辑:程序博客网 时间:2024/06/05 08:08
ScriptableObject允许你存储大量用于公用的数据,可以理解成是Uinty的一个串行化工具,但要和SerializableObject区分开来(只能在Editor下使用)。例如,一个游戏中的配置表数据,这些数据一般都是由策划在Excel等工具上配置,要运用到游戏中时,一般都需要做一个转换,以适应程序中的访问。这时可以使用ScriptableObject,将数据预先处理成我们需要访问的数据结构,存储在ScriptableObject中,然后打包成一个外部文件,这样在游戏运行的时候就不用做解析和组装了。这个功能对大批量的公用数据尤其有用!!
ScriptableObject支持所有原子的类型,也支持strings,arrays,lists还有Unity的Vector3等都支持,而且还支持自定义的类,但需要有一个串行的属性。举个例子:
1、定义一个要打包的类,这个类必须要继承自ScriptableObject:
复制代码2、上面的是要打包的数据结构,在打包前可以先将数据填充,DesignerData里面应该有一个初始化数据的方法。如下图
复制代码3打包数据(需要Unity Pro版)
复制代码个人粗略见解,勿喷!
代码在这里ScriptableObject用法.unitypackage
ScriptableObject支持所有原子的类型,也支持strings,arrays,lists还有Unity的Vector3等都支持,而且还支持自定义的类,但需要有一个串行的属性。举个例子:
1、定义一个要打包的类,这个类必须要继承自ScriptableObject:
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
// DesignerData必须继承自ScriptableObject
public
class
DesignerData : ScriptableObject {
// 这个属性的必须的,因为DesignerData类中的data是SubClass类型
// 必须序列化后才能打包
[System.Serializable]
public
class
SubClass {
[System.Serializable]
// 这个属性的必须的,解析同上
public
class
Item
{
public
string
c;
public
float
d;
}
public
Item item;
public
int
a;
}
public
List<
int
> lst1;
public
List<SubClass> lst2;
public
SubClass data;
public
Vector3 vec;
}
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
public
void
init()
{
// 初始化lst1
lst1 =
new
List<
int
>();
lst1.Add(1);
lst1.Add(2);
lst1.Add(3);
// 初始化data
data =
new
SubClass();
data.a = 101;
data.item =
new
SubClass.Item();
data.item.c =
"world"
;
data.item.d = 99;
// 初始化lst2
lst2 =
new
List<SubClass>();
data =
new
SubClass();
data.a = 1012;
data.item =
new
SubClass.Item();
data.item.c =
"world2"
;
data.item.d = 992f;
lst2.Add(data);
data =
new
SubClass();
data.a = 1011;
data.item =
new
SubClass.Item();
data.item.c =
"world1"
;
data.item.d = 991f;
lst2.Add(data);
// 初始化vec
vec =
new
Vector3(1f, 2f, 3f);
}
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
[MenuItem(
"example/load/ScriptableObjectTest/pack Asset Data"
)]
private
static
void
exportDesignerAssetData()
{
string
path =
"Assets/load/ScriptableObjectTest"
;
string
name =
"DesignerData"
;
DirectoryInfo dirInfo =
new
DirectoryInfo(path);
if
(!dirInfo.Exists)
{
Debug.LogError(
string
.Format(
"can found path={0}"
, path));
return
;
}
// ScriptableObject对象要用ScriptableObject.CreateInstance创建
DesignerData ddata = ScriptableObject.CreateInstance<DesignerData>();
ddata.init();
// 创建一个asset文件
string
assetPath =
string
.Format(
"{0}/{1}.asset"
, path, name);
AssetDatabase.CreateAsset(ddata, assetPath);
// 创建一个assetbundle文件
string
assetbundlePath =
string
.Format(
"{0}/{1}.assetbundle"
, path, name);
BuildPipeline.BuildAssetBundle(ddata,
null
, assetbundlePath);
Debug.Log(
"Finish!"
);
}
代码在这里ScriptableObject用法.unitypackage
0 0
- ScriptableObject的用法
- Uinty ScriptableObject的用法
- Uinty ScriptableObject的用法
- ScriptableObject 整理1 :ScriptableObject的介绍
- 【Unity】ScriptableObject的介绍
- Unity ScriptableObject的理解
- Unity ScriptableObject的创建
- 【Unity】ScriptableObject的介绍
- 【Unity】ScriptableObject的介绍
- ScriptableObject的介绍
- ScriptableObject的介绍
- ScriptableObject 的使用
- ScriptableObject
- ScriptableObject
- unity的scriptableObject的使用
- Unity3D ScriptableObject序列化的应用
- 关于Unity3D中ScriptableObject的介绍
- 【Unity3d】ScriptableObject介绍和简单的本地排行榜实现
- Android Power Management
- js一百零一夜之第九夜-javascript 匿名函数
- Hibernate简介
- 主流编译器对C++11的支持现状比较
- android数据存储方式
- ScriptableObject的用法
- OpenGL库编译相关错误
- Android 绘制 View 机制(API 翻译)
- SVN 主干(trunk)、分支(branch )、标记(tag)
- XFire创建WebService实例
- 关于互联VLAN
- WSDL、Web Services、SOAP关键词的理解
- Android面试系列之一
- Can't locate JSON.pm in @INC 解决方法