开发平台: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视图内容即可。