如何建立自己的商城网站,wordpress contact 伪静态,黄金网站大全免费,wordpress站长地图1.为什么要用ScriptableObject#xff1f;
在游戏开发中#xff0c;有大量的配置数据需要存储#xff0c;这个时候就需要ScriptableObject来存储数据了。 很多人会说我可以用json、xml、txt#xff0c;excel等等 但是你们有没有想过#xff0c;假设你使用的是json#x…1.为什么要用ScriptableObject
在游戏开发中有大量的配置数据需要存储这个时候就需要ScriptableObject来存储数据了。 很多人会说我可以用json、xml、txtexcel等等 但是你们有没有想过假设你使用的是json那你在加载json后还要去解析还需要把它转换为合适的数据结构。 但是ScriptableObject就可以“免”去这一步因为我可以把配置数据解析放在游戏启动之前。 而且ScriptableObject可以添加一些自定义的方法十分方便。
2.什么是 ScriptableObject
ScriptableObject 是一个类继承自 UnityEngine.Object 。要想使用它需要我们写个脚本去继承 。 ScriptableObject 类的实例会被保存为资源文件.asset文件和其他预制体、材质球、图片等文件类似。如下图
3.如何创建 ScriptableObject
①声明自定义的数据容器 新建一个脚本ItemData.cs继承 ScriptableObject然后声明成员。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class ItemData : ScriptableObject
{//道具IDpublic int id;//道具名称public string strName;//道具图标public string icon;//道具类型public int type;
}②创建数据文件 方法一为类添加 CreateAssetMenu 特性
[CreateAssetMenu(fileName ItemData, menuName ScriptableObject/道具数据, order 0)]点击文件夹空白处选择创建
方法二静态方法创建数据对象 新建一个EditorTool 脚本。不用继承 MonoBehavoiur也不用挂载到游戏物体上。 引入 UnityEditor 命名空间 需要特别注意引入 UnityEditor 命名空间的脚本必须放入任意一个命名为“Editor”的文件夹下以便打包过滤
using UnityEngine;
using UnityEditor;
public class EditorTool
{[MenuItem(Tool/创建道具数据)]public static void CreateMyData(){//得到需要创建的数据结构类型ItemData asset ScriptableObject.CreateInstanceItemData();//创建一个数据资源文件第二个参数为存储路径AssetDatabase.CreateAsset(asset, Assets/Resources/Data/ItemData.asset);//保存创建的资源AssetDatabase.SaveAssets();//刷新界面AssetDatabase.Refresh();}
}此时在菜单栏可以看到多了刚刚定义的按钮点击即可创建 创建完就长这样刚刚申明的成员也到可以看到。
4.项目中的 ScriptableObject
ScriptableObject已经创建完毕了但实际开发中数据结构可能很复杂所以都会根据不同的功能有所改变。 ①比如这是一个存储地形数据的配置那么数据量就可能非常大可能有几万行。这时候我们可以加HideInInspector来隐藏面板显示。隐藏的好处是选择当前配置不卡顿不然数据多选中会非常卡。
[HideInInspector]
public int[] data;②嵌套使用正常的配置可能都是数组那可能就需要使用如下这种结构了
using UnityEngine;public class ItemData : ScriptableObject
{public Item[] list;}
[System.Serializable]
public class Item
{//道具IDpublic int id;//道具名称public string strName;//道具图标public string icon;//道具类型public int type;[HideInInspector]public int[] data;
}
③封装一些方法方便其他功能使用
public class ItemData : ScriptableObject
{public Item[] list;//根据道具ID获取数据public Item GetSheet(int id){for (int i 0;i list.Length;i){if (list[i].id id){return list[i];}}return null;}
}
[5.加载 ScriptableObject void Start(){string path Data/ItemData;Object obj Resources.Load(path, typeof(ScriptableObject));if (obj ! null){ItemData mItemData obj as ItemData;}}6.与exce配合使用
在正常开发中肯定不可能手动配置ScriptableObject 正常的策划配置文件都是excel我们可以写个方法直接读取excel的数据然后生成ScriptableObject 双剑合并效率翻倍
不会Excel读取的可以参考这篇文章 Unity读取Excel教程