zoukankan      html  css  js  c++  java
  • 非常好用的游戏数据保存类: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

    后话:我不是程序员,我只是搬运工!老板不在乎你是不是项目怎么做出来的,是不是代码自创。他们只关心你是不是高效完成任务。以上内容摘抄自网络!

  • 相关阅读:
    124. Binary Tree Maximum Path Sum
    99. Recover Binary Search Tree
    255. Verify Preorder Sequence in Binary Search Tree
    [LeetCode] 79. Word Search Java
    [LeetCode] 78. Subsets Java
    [LeetCode] 77. Combinations Java
    [LeetCode] 52. N-Queens II Java
    [LeetCode] 51. N-Queens Java
    [LeetCode] 47. Permutations II Java
    [LeetCode] 46. Permutations Java
  • 原文地址:https://www.cnblogs.com/VR-1024/p/9584567.html
Copyright © 2011-2022 走看看