Unity3D-小规模初始化数据的存储和读取

    xiaoxiao2021-03-25  113

    Unity中会用到一些体量很小的数据,例如游戏的一些初始化的数据,仅在编辑的时候需要修改。

    这个时候,如果用txt存储,读取和设置会毕竟麻烦,如果用数据库又搞的比较复杂。

    这时候可以有两种方法处理,一种是将数据存储在预制件里,另外是利用ScriptableObject将数据存储为资源。

    假设有物品数据,仅2、3条。

    物品类,记得序列化

    Item.cs

    using UnityEngine; [System.Serializable] public class Item { public int id; public string name; public Sprite icon; public Color color; public Vector3 posion; }

    方法一,将数据存储在预制件里

    新建一个类

    DataPfb.cs

    using UnityEngine; using System.Collections; public class DataPfb : MonoBehaviour { public Item[] items; }将其拉到游戏对象中,做成预制件。

    图中绿框里的就是数据。

    只要该预制件在场景中,用

    FindObjectOfType<DataPfb>().items[i] 就可以读取数据。

    方法二、利用ScriptableObject将数据存储为资源

    新建脚本ItemSet.cs

    using UnityEngine; using System.Collections; using UnityEditor; public class ItemSet : ScriptableObject { #if UNITY_EDITOR [UnityEditor.MenuItem ("innyo/Create item set")] public static void CreateItemSet () { var objSet = CreateInstance<ItemSet> (); string savePath = EditorUtility.SaveFilePanel ( "save", "Assets/", "ItemAsset", "asset" ); if (savePath != "") { savePath ="Assets/"+ savePath.Replace (Application.dataPath, ""); UnityEditor.AssetDatabase.CreateAsset (objSet, savePath); UnityEditor.AssetDatabase.SaveAssets (); } } #endif public Item[] items; }

    这时候,菜单会多出一项,

    点击以后,会提示保存文件的地址

    保存以后会多出一个资源文件

    点击以后,可以编辑数据

    使用方法如下,

    脚本新建一个公开属性,是资源的类型

    using UnityEngine; using System.Collections; public class use : MonoBehaviour { public ItemSet itemSet; // Use this for initialization void Start () { Debug.Log ("start itmes..."); for (int i = 0; i < itemSet.items.Length; i++) { Debug.Log (itemSet.items[i].name); } Debug.Log ("start info..."); for (int i = 0; i < itemSet.info.Length; i++) { Debug.Log (itemSet.info[i]); } } } 将新建的资源拖到脚本的属性中

    运行结果如下

    个人更喜欢第二种方法,在数据量很小的时候,比使用数据库或者文本存储跟方便。

    转载请注明原文地址: https://ju.6miu.com/read-9500.html

    最新回复(0)