您现在的位置是:主页 > news > 公司网站建设公/原创文章代写
公司网站建设公/原创文章代写
admin2025/6/15 7:04:28【news】
简介公司网站建设公,原创文章代写,重庆做网站制作的公司,软件开发平台设计<pre name"code" class"plain"> ScriptableObject允许你存储大量用于公用的数据,可以理解成是Uinty的一个串行化工具,但要和SerializableObject区分开来(只能在Editor下使用)。例如,一个游戏…
公司网站建设公,原创文章代写,重庆做网站制作的公司,软件开发平台设计<pre name"code" class"plain"> ScriptableObject允许你存储大量用于公用的数据,可以理解成是Uinty的一个串行化工具,但要和SerializableObject区分开来(只能在Editor下使用)。例如,一个游戏…
<pre name="code" class="plain">
ScriptableObject允许你存储大量用于公用的数据,可以理解成是Uinty的一个串行化工具,但要和SerializableObject区分开来(只能在Editor下使用)。例如,一个游戏中的配置表数据,这些数据一般都是由策划在Excel等工具上配置,要运用到游戏中时,一般都需要做一个转换,以适应程序中的访问。这时可以使用ScriptableObject,将数据预先处理成我们需要访问的数据结构,存储在ScriptableObject中,然后打包成一个外部文件,这样在游戏运行的时候就不用做解析和组装了。这个功能对大批量的公用数据尤其有用!!
ScriptableObject支持所有原子的类型,也支持strings,arrays,lists还有Unity的Vector3等都支持,而且还支持自定义的类,但需要有一个串行的属性。举个例子:
1、定义一个要打包的类,这个类必须要继承自ScriptableObject:
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using UnityEditor;
using System.IO;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;public void init(){// 初始化lst1lst1 = new List<int>();lst1.Add(1);lst1.Add(2);lst1.Add(3);// 初始化lst2lst2 = new List<SubClass>();data = new SubClass();data.a = 101;data.item = new SubClass.Item();data.item.c = "world";data.item.d = 99;lst2.Add(data);data = new SubClass();data.a = 102;data.item = new SubClass.Item();data.item.c = "world2";data.item.d = 992f;lst2.Add(data);data = new SubClass();data.a = 103;data.item = new SubClass.Item();data.item.c = "world1";data.item.d = 991f; lst2.Add(data);// 初始化vecvec = new Vector3(1f, 2f, 3f);}[MenuItem("ScriptableObject/PackData")]private static void exportDesignerAssetData(){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文件//***.asset既可以在运行时(runtime),也可以再编辑器环境下使用string assetPath = string.Format("{0}/{1}.asset", Path, name);AssetDatabase.CreateAsset(ddata, assetPath);AssetDatabase.Refresh();//我们还可以创建资源包//***.unity3d只能在运行时(runtime)使用,并且只能通过WWW加载Object o = AssetDatabase.LoadAssetAtPath(assetPath, typeof(DesignerData));BuildPipeline.BuildAssetBundle(o, null, "TestAssetBundle.unity3d");AssetDatabase.Refresh();// ***.assetbundle文件只能通过WWW来加载string assetbundlePath = string.Format("{0}/{1}.assetbundle", Path, name);BuildPipeline.BuildAssetBundle(ddata, null, assetbundlePath);Debug.Log("PackData, Finish!");} private static string Path = "Assets/Resources/ScriptableObjectData";private static string name = "DesignerData";public static void ReadAssetByResourcesLoad(){string path = "ScriptableObjectData/DesignerData";DesignerData o = Resources.Load (path, typeof(DesignerData)) as DesignerData;Debug.Log (o.data.item.c);}}