非常好用的游戲數據保存類:ScriptableObject


基礎知識:

1、將數據儲存資源文件中,像普通資源一樣管理,退出也會保存修改

2、繼承自UnityEngine.Object,不必附着在對象上也無需/不能賦給Gameobject或Prefab

3、可以被serialised,可以在資源面板創建一個Asset文件,把數據存儲在資源文件中,通過屬性面板可修改數值。

4、可以放到.asset文件中,因此可以自定義我們需要的資源類型

5、本身是個類,可以引用,在項目之間共享

6、回調少 :OnEnable 、OnDisable、OnDestroy

7、persistent:當它被綁定到.asset文件或者AssetBundle等資源文件中的時候(它可以通過Resources.UnloadUnusedAssets來被unload出內存。可以通過腳本引用或其他需要的時候被再次load到內存)

    非persistent:通過CreateInstance<>來創建的時候(它可以通過GC被直接destroy掉(如果沒有任何引用的話)。如果不想被GC的話,可以使用HideFlags.HideAndDontSave)

使用:1、創建一個類(既ScriptableObject類),繼承自ScriptableObject即可

using UnityEngine;
//在資源面板右鍵Create,創建該類對應的Asset文件
[CreateAssetMenu(fileName = "GameDataAsset", menuName = "Creat GameData Asset")]

public class GameData : ScriptableObject
{
    [Header("測試_字符串")]
    public string testStr = "Test String";
    [Space(10)]
    [Header("測試_數組")]
    public int[] testArr;
}

2、在資源面板中創建Asset文件
右鍵 => Create => 創建ScriptableObject類對應的Asset文件

3、就可以提供給策划填寫/修改數值了

4、讀取Asset文件,獲取序列化的信息

在這里使用Resources加載的Asset文件,也可以通過AB加載等方式,或者直接序列化GameData 類都可。
加載到ScriptableObject類之后,就可以使用里面的屬性
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class GetGameData : MonoBehaviour
{
    GameData gameData;
    void Start ()
    {
        gameData = Resources.Load&lt;GameData&gt;("GameDataAsset");
        Debug.Log(gameData.testStr);
        foreach (var item in gameData.testArr)
        {
            Debug.Log(item);
        }
    }
}

4、保存游戲數據(讀取到Asset,修改屬性,數據變化自動保存)

public class GetGameData : MonoBehaviour
{
    GameData gameData;
    void Start ()
    {
        gameData = Resources.Load&lt;GameData&gt;("GameDataAsset");
        Debug.Log(gameData.testStr);
        gameData.testStr = "Change Value";
        Debug.Log(gameData.testStr);
    }
}

 

參考文獻:https://blog.csdn.net/candycat1992/article/details/52181814

https://unity3d.com/cn/learn/tutorials/modules/beginner/live-training-archive/scriptable-objects

http://gad.qq.com/article/detail/286720?ADTAG=gad.cx.wz

實用案例:

1、https://blog.csdn.net/LIQIANGEASTSUN/article/details/50510615

2、https://blog.csdn.net/IOTHua/article/details/79429266

 

后話:我不是程序員,我只是搬運工!老板不在乎你是不是項目怎么做出來的,是不是代碼自創。他們只關心你是不是高效完成任務。以上內容摘抄自網絡!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM