注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Mississippi的博客

学习使人进步

 
 
 

日志

 
 

unity3D中用ScriptableObject存储资源  

2011-01-24 00:36:41|  分类: Unity3D |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
 

通常,可以用BuildPipeline.BuildAssetBundle打包资源,这些资源包括模型、纹理、贴图等。

其实也可以打包ScriptableObject,而ScriptableObject中可以存储任何数据类型。

以下为一个完整示例。

 

1、先创建一个类:

using UnityEngine;

using System.Collections.Generic;

 

public class SysData : ScriptableObject{

              public List<Vector3> content;

}

该类只有一个属性content。当然也可以声明更多属性、事件和方法。

在后面,这个类的实例将作为资源被打包。

 

2、创建一个编辑器脚本:

该脚本用于实例化SysData,设置一些数据,然后打包。

 

using UnityEngine;

using UnityEditor;

using System.Collections.Generic;

 

public class Export{

       [MenuItem("Assets/Export")]

        public static void Execute(){

              //实例化SysData

              SysData sd = ScriptableObject.CreateInstance<SysData>();

             

              //随便设置一些数据给content

              sd.content = new List<Vector3>();

              sd.content.Add(new Vector3(1,2,3));

              sd.content.Add(new Vector3(4,5,6));

               

              // SysData将创建为一个对象,这时在project面板上会看到这个对象。

              string p = "Assets/SysData.asset";

        AssetDatabase.CreateAsset(sd, p);

              Object o = AssetDatabase.LoadAssetAtPath(p, typeof(SysData));

               

              //打包为SysData.assetbundle文件。

              BuildPipeline.BuildAssetBundle(o, null, "SysData.assetbundle");

 

              //删除面板上的那个临时对象

              AssetDatabase.DeleteAsset(p);            

        }

}

 

3、运行时加载这个数据资源。

IEnumerator Start () {

              WWW www = new WWW("file://" + Application.dataPath + "/../SysData.assetbundle");

              yield return www;

              //转换资源为SysData,这个sd对象将拥有原来在编辑器中设置的数据。

              SysData sd = www.assetBundle.mainAsset as SysData;

             

             //如打印sd.content[0],将得到Vector3(1,2,3);

              print(sd.content[0]);

}

 

       4、这其实是把整个对象实例打包,如果ScriptableObject属性中包括其他的类实例,则这些类需加上[Serializable]序列化。通过这种方法,可以将系统需要的数据(如角色分类、matrix4x4数据等等)打包,加载后直接转换为预定的类型,具有更高的效率。
  评论这张
 
阅读(2942)| 评论(1)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017