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

发表于2018-07-28
评论0 6.7k浏览
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://blog.csdn.net/wuyt2008/article/details/60955491

如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引