【Unity 笔记】ScriptableObject 数据存储
·
开发平台:Unity 2019版本以上
编程平台:Visual Studio 2017版本以上
编程语言:C#
一、什么是ScriptableObject?
描述:只用于存储数据Assets的静态函数,无需附加到游戏对象上。
例如:角色移动参数、攻击参数、道具参数等
二、ScriptableObject中的成员与方法
2.1 静态方法
CreateInstance():实例化(创建)一个与类名相同的对象

2.2 讯息
OnDestroy():销毁对象OnDisable():禁用对象OnEnable():激活对象
2.3 继承成员与方法

如图所示,ScriptableObject继承于Object对象,其可使用来自于父类的Protected/Public级别成员方法。
变量
hideFlags:是否隐藏对象,是否保存在场景中、是否允许被用户修改?name:对象名称
方法
GetInstanceID():获取实例化对象的ID编号
实例化对象的ID全局唯一,参考用户UID唯一ToString():转换为字符串string数据类型
静态方法
Destroy():销毁对象DestroyImmediate():立即销毁对象
建议使用Destroy(),其包含对DestroyImmediate()的立即销毁功能和自身额外的延时销毁功能DontDestroyOnLoad():加载新场景过程中,该目标对象不会被自动销毁FindObjectOfType():返回Type类型的第一个活动加载对象FindObjectsOfType():返回Type类型的所有对象列表Instantiate():克隆对象,并返回这个对象的克隆对象
运算符
bool:返回true/false,这里用于判断对象是否存在operator !=:比较两个对象是否为不同的对象operator ==:比较两个对象是否为同类的对象
三、如何使用ScriptableObject
- 创建脚本命名:
SkillInfo,并继承于ScriptableObject - 添加一下字段,如下所示:
using UnityEngine;
namespace Skill
{
//技能信息
public class SkillInfo : ScriptableObject
{
public string name; //技能名称
public AnimationClip animation; //技能释放动画
public Sprite icon; //技能图标
public string description; //技能描述
public float dmageValue; //技能伤害
}
}
- Assets下新建文件夹,命名
Editor,并创建脚本SkillUtility,内容如下
using UnityEditor;
using UnityEngine;
namespace Skill
{
// 生成技能信息文件
public class SkillUtility
{
[MenuItem("Tools/Skill/Create SkillInfo")]
static void Create()
{
//生成 SkillInfo实例
SkillInfo info = ScriptableObject.CreateInstance<SkillInfo>();
//生成文件
AssetDatabase.CreateAsset(info, "Assets/Skills/skill.asset");
//自动选中
Selection.activeObject = info;
}
}
}
- 根据
[MenuItem("Tools/Skill/Create SkillInfo")]行,从Unity菜单栏上,依循 Tools -> Skill -> Create SkillInfo 创建实例对象。 - 创建实例对象路径,遵循实例中由我们提供的
Assets/Skills/skill.asset路径 - 代码行
Selection.activeObject = info,为我们自动选中实例化对象在Assets中的具体位置 - 点击实例化对象,查看Inspector视图内容即可。

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)