基礎知識:
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; }

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

4、讀取Asset文件,獲取序列化的信息
using System.Collections; using System.Collections.Generic; using UnityEngine; public class GetGameData : MonoBehaviour { GameData gameData; void Start () { gameData = Resources.Load<GameData>("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<GameData>("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
后話:我不是程序員,我只是搬運工!老板不在乎你是不是項目怎么做出來的,是不是代碼自創。他們只關心你是不是高效完成任務。以上內容摘抄自網絡!
