【Unity】ScriptableObject的基本介绍

转载:【Unity】ScriptableObject的介绍 —— CSDN

简述

最近对unity提供的ScriptableObject比较感兴趣,想了解一下这方面的技术知识。故此参考网上的学习资料总结一遍。

ScriptableObject的好处

  1. 将游戏数据存储在了资源文件中,能够在游戏退出后依然保持这一份游戏数据。
  2. 能依赖继承实现很好的复用关系。

个人觉得第一点是非常好的理念,让游戏的数据存储变得更加的优雅便捷。同时能够实现高复用,来适应多个不同的使用场景。

解决的问题

  • 运行时为了保存数据,基本依靠的是Copy Component Value来解决,非常的麻烦,如果存在多个数据想要保存的话基本没办法。这种时候就应该考虑使用ScriptableObject。
  • 在场景和项目之间很难实现共享,基本也是要序列化一个新的资源文件来实现。
  • 在概念上难以定义这种对象,存储的数据内容不能很好的作区分。扩展性不强。

缺点

  • 回调函数较少
    • OnEnable
    • OnDisable
    • OnDestroy
  • 真正意义上的共享,因此如果修改了数据,就真的修改了

使用方式

  1. 继承自MonoBehavior的改成ScriptabObject
using UnityEngine;

[CreateAssetMenu(menuName="MySubMenue/Create MyScriptableObject ")]
public class MyScriptableObject : ScriptableObject
{
   
    public int someVariable;
}

CreateAssetMenu会在资源菜单创建一个ScriptaObject的选项,方便创建对象。

回调函数的调用时机

三个回调函数的调用时机

  • OnEnable
    • 创建的时候
    • 载入的时候
    • 重载代码的完成时候
  • OnDisable
    • 开始重载代码的时候
    • 将要销毁的时候
  • OnDestroy
    • 销毁时

参考例子——游戏设置

游戏设置继承自ScriptableObject,并实现单例模式。这样子在设置中去调用GetInstance方法可以就可以访问到当前的游戏设置。而且退出游戏时游戏数据也继续保持。

[CreateAssetMenu]
public class GameSettings : ScriptableObject
{
   
    [Serializable]
    public class PlayerInfo
    {
   
        public string Name;
        public Color Color
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值