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