6.配置ScriptableObject数据

6.ScriptableObject应用-配置数据


6.1 知识点

ScriptableObject数据文件为什么非常适合用来做配置文件?

  • 配置文件的数据在游戏发布之前定规则
  • 配置文件的数据在游戏运行时只会读出来使用,不会改变内容
  • 在Unity的Inspector窗口进行配置更加的方便

举例制作配置

以前我们的常规配置方式
都是利用之前学习过的 数据持久化四部曲当中的内容进行配置的
比如 xml配置 json配置 excel配置
而ScriptableObject不需要使用第三方软件进行配置,可以直接在Unity进行配置

创建RoleInfo脚本,继承ScriptableObject,使用ScriptableObject特性CreateAssetMenu,创建菜单项”ScriptableObject/角色信息”,保存为文件”RoleInfo”

// 使用ScriptableObject特性,创建菜单项"ScriptableObject/角色信息",保存为文件"RoleInfo"
[CreateAssetMenu(fileName = "RoleInfo", menuName = "ScriptableObject/角色信息")]
public class RoleInfo : ScriptableObject

RoleInfo脚本中定义一个内部类RoleData,用于存储角色的各项信息,添加 [System.Serializable]让这个类能在Inspector窗口上编辑

// 定义内部类RoleData,用于存储角色的各项信息
[System.Serializable]
public class RoleData
{
    public int id; // 角色ID
    public string res; // 角色模型资源路径
    public int atk; // 角色攻击力
    public string tips; // 角色提示信息
    public int lockMoney; // 解锁所需金币数
    public int type; // 角色类型
    public string hitEff; // 攻击特效路径

    // 打印角色数据
    public void Print()
    {
        Debug.Log(id);
        Debug.Log(res);
        Debug.Log(atk);
        Debug.Log(tips);
        Debug.Log(lockMoney);
        Debug.Log(type);
        Debug.Log(hitEff);
    }
}

RoleInfo脚本中定义存储角色数据的列表

public List<RoleData> roleList; // 存储角色数据的列表

创建么角色信息数据文件,在inspector窗口配置数据


在主脚本中创建角色信息变量并关联数据文件,遍历打印每个角色信息

public RoleInfo roleInfo;

for (int i = 0; i < roleInfo.roleList.Count; i++)
{
    roleInfo.roleList[i].Print();
}

总结

  • 只用不改

  • 并且经常会进行配置的数据

  • 非常适合使用ScriptableObject

  • 我们可以利用ScriptableObject数据文件 来制作编辑器相关功能

  • 比如:Unity内置的技能编辑器、关卡编辑器等等

  • 我们不需要把编辑器生成的数据生成别的数据文件,而是直接通过ScriptableObject进行存储

  • 因为内置编辑器只会在编辑模式下运行,编辑模式下ScriptableObject具备数据持久化的特性


6.2 知识点代码

Lesson06_ScriptableObject应用_配置数据

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Lesson06_ScriptableObject应用_配置数据 : MonoBehaviour
{
    public RoleInfo roleInfo;

    void Start()
    {
        #region 知识点一 ScriptableObject数据文件为什么非常适合用来做配置文件?
        //1.配置文件的数据在游戏发布之前定规则
        //2.配置文件的数据在游戏运行时只会读出来使用,不会改变内容
        //3.在Unity的Inspector窗口进行配置更加的方便
        #endregion

        #region 知识点二 举例制作
        //以前我们的常规配置方式
        //都是利用之前学习过的 数据持久化四部曲当中的内容进行配置的
        //比如 xml配置 json配置 excel配置
        //而ScriptableObject不需要使用第三方软件进行配置,可以直接在Unity进行配置

        for (int i = 0; i < roleInfo.roleList.Count; i++)
        {
            roleInfo.roleList[i].Print();
        }
        #endregion

        #region 总结
        //只用不改
        //并且经常会进行配置的数据
        //非常适合使用ScriptableObject

        //我们可以利用ScriptableObject数据文件 来制作编辑器相关功能
        //比如:Unity内置的技能编辑器、关卡编辑器等等
        //      我们不需要把编辑器生成的数据生成别的数据文件,而是直接通过ScriptableObject进行存储
        //      因为内置编辑器只会在编辑模式下运行,编辑模式下ScriptableObject具备数据持久化的特性
        #endregion
    }
}

RoleInfo

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

// 使用ScriptableObject特性,创建菜单项"ScriptableObject/角色信息",保存为文件"RoleInfo"
[CreateAssetMenu(fileName = "RoleInfo", menuName = "ScriptableObject/角色信息")]
public class RoleInfo : ScriptableObject
{
    // 定义内部类RoleData,用于存储角色的各项信息
    [System.Serializable]
    public class RoleData
    {
        public int id; // 角色ID
        public string res; // 角色模型资源路径
        public int atk; // 角色攻击力
        public string tips; // 角色提示信息
        public int lockMoney; // 解锁所需金币数
        public int type; // 角色类型
        public string hitEff; // 攻击特效路径

        // 打印角色数据
        public void Print()
        {
            Debug.Log(id);
            Debug.Log(res);
            Debug.Log(atk);
            Debug.Log(tips);
            Debug.Log(lockMoney);
            Debug.Log(type);
            Debug.Log(hitEff);
        }
    }

    public List<RoleData> roleList; // 存储角色数据的列表
}


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com

×

喜欢就点赞,疼爱就打赏