当前位置:   article > 正文

【Unity】ScriptableObject 序列化游戏数据/保存数据到本地_scritable object可以保存吗

scritable object可以保存吗

游戏中经常会有一些需要序列化的数据,通常的做法就是把这些数据 [SerializeField],然后在视图面板中修改数值,这样不需要修改脚本,就可以进行数据调整,方便策划修改数值。
不过这样做还有一个缺点,因为序列化的数据都保存在Scene场景内,每修改一次数值,场景文件(Scene.unity)都会随之变动,多人合作时,场景文件就很容易发生冲突。利用ScriptableObject 来进行序列化,它可以在资源面板创建一个Asset文件,把数据存储在资源文件中,通过属性面板可修改数值。

创建Asset步骤:

1.创建 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;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

在类中定义需要序列化的属性,这样就可以啦,是不是很简单~

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<GameData>("GameDataAsset");
        Debug.Log(gameData.testStr);
        foreach (var item in gameData.testArr)
        {
            Debug.Log(item);
        }
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

修改Asset步骤:

与ScriptableObject序列化数据类似:
1.创建 ScriptableObject 类
2.创建 Asset 文件
3.读取 Asset 文件,修改其属性值,数据变化将自动保存到 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);
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

代码运行前
这里写图片描述
代码运行后,Asset文件数值修改完成
这里写图片描述
注意:运行时的修改,在退出运行后不会保存!!!适合保存固定不变的配置数据。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/112487
推荐阅读
相关标签
  

闽ICP备14008679号