U4S2SL1——配置数据
U4S2SL1——配置数据
ScriptableObject数据文件为什么非常适合用来做配置文件?
配置文件的数据在游戏发布之前定规则
配置文件的数据在游戏运行时只会读出来使用,不会改变内容
在Unity的Inspector窗口进行配置更加的方便
只用不改,并且经常会进行配置的数据,非常适合使用ScriptableObject
我们可以利用ScriptableObject数据文件,来制作编辑器相关功能
比如:Unity内置的技能编辑器、关卡编辑器等等
我们不需要把编辑器生成的数据生成别的数据文件,而是直接通过ScriptableObject进行存储,
因为内置编辑器只会在编辑模式下运行,编辑模式下ScriptableObject具备数据持久化的特性
举例制作
以前我们的常规配置方式,都是利用之前学习过的数据持久化四部曲当中的内容进行配置的
比如 xml配置 json配置 excel配置
但是他们往往是不需要修改的内容,因此这些数据也可以使用ScriptableObject数据文件来做配置文件
RoleInfo.cs
值得注意的是,想要让自定义类在Inspector窗口上显示需要加上 ...
U4S2L4——ScriptableObject 让其真正意义上的持久化
U4S2L4——ScriptableObject 让其真正意义上的持久化
对于ScriptableObject的数据,由于它在游戏发布运行过程中无法被持久化
我们可以利用PlayerPrefs、XML、Json、2进制等等方式
让其可以达到被真正持久化的目的
但是并不是很建议大家利用ScriptableObject来做数据持久化,有点画蛇添足的意思了
本章代码关键字
1JsonUtility.FromJsonOverwrite() //传入json字符串和要读取数据的对象,json字符串反序列化的内容会直接覆盖掉传入的对象的数据
前置知识
回顾通过ScriptableObject创建非持久化数据
Json数据持久化
回顾数据持久化
硬盘<=>内存
使用数据时从硬盘中读取,数据改变后保存到硬盘上
游戏退出程序关闭后,数据信息会被存储到硬盘上,达到持久化的目的
我们之前学习过的数据持久化相关知识
PlayerPrefs
XML
Json
2进制
ScriptableObject并不适合用来做数据持久化功能
但是我们可以利用我们学过的数据持久化方案让其持久化
利用Jso ...
U4S2L3——ScriptableObject 非持久数据
U4S2L3——ScriptableObject 非持久数据
本章代码关键字
1ScriptableObject.CreateInstance<>() //在运行时创建出指定继承ScriptableObject的对象,该对象只存在于内存当中,可以被GC
ScriptableObject的非持久化数据
ScriptableObject的非持久化数据指的是,不管在编辑器模式还是在发布后都不会持久化的数据
我们可以根据自己的需求随时创建对应数据对象进行使用,就好像直接new一个数据结构类对象
利用ScriptableObject生成非持久化的数据
利用ScriptableObject中的静态方法CreateInstance<>()
该方法可以在运行时创建出指定继承ScriptableObject的对象
该对象只存在于内存当中,可以被GC
调用一次就创建一次
123456789101112131415using UnityEngine;public class Lesson3 : MonoBehaviour{ public MyData da ...
U4S2L2——ScriptableObject 数据文件的使用
U4S2L2——ScriptableObject 数据文件的使用
本章代码关键字
123456//在继承ScriptableObject的类内Awake() { } //数据文件创建时调用OnDestroy() { } //ScriptableObject 对象将被销毁时调用OnDisable() { } //ScriptableObject 对象销毁时、即将重新加载脚本程序集时 调用OnEnable() { } //ScriptableObject 创建或者加载对象时调用OnValidate() { } //编辑器才会调用的函数,Unity在加载脚本或者Inspector窗口中更改值时调用
ScriptableObject 数据文件的使用
其实创建出来的数据资源文件,你可以把它理解成一种记录数据的资源
它的使用方式,和我们以前使用Unity当中的其它资源规则是一样的
比如:预设体、音频文件、视频文件 ...
U4S2L1——ScriptableObject 数据文件的创建
U4S2L1——ScriptableObject 数据文件的创建
本章代码关键字
123456ScriptableObject //数据配置存储基类,自定义的数据资源文件需要继承它[CreateAssetMenu()] //通过菜单创建资源特性,参数分别是是默认文件名,为在Asset/Create菜单中显示的名字,排序优先级ScriptableObject.CreateInstance<>() //创建数据资源文件的方法,泛型参数为要创建的ScriptableObject派生类AssetDatabase.CreateAsset() //传入要保存的资源文件和存储路径,在指定目录下创建文件AssetDatabase.SaveAssets() //将创建的资源文件保存下来AssetDatabase.Refresh() //刷新Project窗口
ScriptableObject数据文件的创建
创建Scri ...
U4S2——数据配置存储基类 ScriptableObject
U4S2——数据配置存储基类 ScriptableObject
ScriptableObject
ScriptableObject是Unity提供的一个数据配置存储基类
它是一个可以用来保存大量数据的数据容器,就像是可以自定义的数据资源文件
它是一个类似MonoBehavior的基类,需要我们继承它来进行使用
它的主要作用是:
数据复用(多个对象用同一个数据)
配置文件(配置游戏中的数据)
编辑模式下的数据持久化
主要讲解内容
ScriptableObject是什么
Unity提供的一个数据存储基类
ScriptableObject的好处
文件配置、数据复用、更好的处理数据带来的多态行为
本系列学习内容:
ScriptableObject 数据文件的创建
ScriptableObject 数据文件的使用
ScriptableObject 非持久数据
ScriptableObject 让其真正意义上的持久
ScriptableObject 的应用
配置数据
复用数据
数据带来的多态行为
单例模式化的获取数据
数据复用
比如一个子弹对象,以前我们通过面向 ...
UMVCSL7——PureMVC框架UI实例
UMVCSL7——PureMVC框架UI实例
注意!需要先将前面6节课的内容看完再来接着看这里的内容
本章代码关键字
12345678Notifier.Facade //继承了Notifier的类(SimpleCommand、Mediator、Proxy都继承了该类)可以直接调用场景上唯一的FacadeNotifier.SendNotification() //继承了Notifier的类可以直接发送通知Facade.HasMediator() //传入Mediator的名字,检测是否有该MediatorFacade.RegisterMediator() //传入Mediator对象,注册MediatorFacade.RetrieveMediator() //传入Mediator的名字,获取特定的MediatorFacade.HasProxy() //传入Proxy的名字,检测是否有该ProxyFacade.RegisterProxy() //传入Proxy对象,注册Pr ...
UMVCSL6——Facade和Command
UMVCSL6——Facade和Command
本章代码关键字
123456Facade //Facade基类,任何在PureMVC内作为Facade的类都应该继承该类,可以实现对PureMVC内框架下所有对象的管理facade.RegisterCommand() //注册命令,将通知和命令绑定在一起facade.SendNotification() //发送通知,触发监听该通知的命令和MediatorInitializeController() { } //初始化控制层内容,这里应当为所有的Command命令进行注册SimpleCommand //即单个命令类,所有只负责一个业务且作为Command的类,应当继承该类,他必须要在Facade里注册并于通知绑定Execute() { } //当接收到绑定的通知后要执行的方法
Facade
Facade是PureMVC非常重要的内容,它管理了PureMVC框架下的Mo ...
UMVCSL5——角色面板View和Mediator
UMVCSL5——角色面板View和Mediator
本章大部分知识已在上一章讲过,这里不再阐述相同内容
View
123456789101112131415161718192021222324252627using UnityEngine;using UnityEngine.UI;public class NewRoleView : MonoBehaviour{ public Text txtLev; public Text txtHp; public Text txtAtk; public Text txtDef; public Text txtCrit; public Text txtMiss; public Text txtLuck; public Button btnClose; public Button btnLevUp; public void UpdateInfo(PlayerDataObject data) { txtLev.text = "LV." ...
UMVCSL4——主面板View和Mediator
UMVCSL4——主面板View和Mediator
本章代码关键字
123456789101112Mediator //Mediator基类,任何在PureMVC内作为Mediator中介的类都应该继承该类,可以实现对其关联ViewUI界面的操作mediator.Name //字符串常量,其派生类里可以覆盖该Name,使用自己的字符串作为名字mediator.ViewComponent //该Mediator派生类对象关联的View类对象Mediator() //Mediator的构造函数,继承该类必须要声明构造函数调用该构造函数,用于初始化名字和关联的对象string[] ListNotificationInterests() { } //Mediator要监听哪些通知的方法,返回要监听的通知字符串数组HandleNotification(INotification notification) { } ...