U4S2SL2——复用数据
U4S2SL2——复用数据 使用预设体对象可能存在的内存浪费问题 对于只用不变的数据,以面向对象的思想去声明对象类是可能存在内存浪费的问题的 我们以子弹对象为例 在以前,子弹对象挂载子弹脚本,子弹脚本包含子弹诸如移动速度和攻击力等数据,然后通过Resources等手段来在场景上创建子弹预设体 这样每个子弹都会有自己的子弹类对象,每个对象都会占用自己的内存,然而这些子弹脚本的数据其实都是相同且不变的 因此没有必要让子弹对象都分配多个的内存,我们完全可以让所有子弹对象共享一个子弹数据 123456789101112using UnityEngine;public class Bullet : MonoBehaviour{ public float speed; public int atk; void Update() { this.transform.Translate(speed * Time.deltaTime * Vector3.forward); ...
U4S2SL1——配置数据
U4S2SL1——配置数据 ScriptableObject数据文件为什么非常适合用来做配置文件? 配置文件的数据在游戏发布之前定规则 配置文件的数据在游戏运行时只会读出来使用,不会改变内容 在Unity的Inspector窗口进行配置更加的方便 只用不改,并且经常会进行配置的数据,非常适合使用ScriptableObject 我们可以利用ScriptableObject数据文件,来制作编辑器相关功能 比如:Unity内置的技能编辑器、关卡编辑器等等 我们不需要把编辑器生成的数据生成别的数据文件,而是直接通过ScriptableObject进行存储, 因为内置编辑器只会在编辑模式下运行,编辑模式下ScriptableObject具备数据持久化的特性 举例制作 以前我们的常规配置方式,都是利用之前学习过的数据持久化四部曲当中的内容进行配置的 比如 xml配置 json配置...
U4S2L4——ScriptableObject 让其真正意义上的持久化
U4S2L4——ScriptableObject 让其真正意义上的持久化 对于ScriptableObject的数据,由于它在游戏发布运行过程中无法被持久化 我们可以利用PlayerPrefs、XML、Json、2进制等等方式 让其可以达到被真正持久化的目的 但是并不是很建议大家利用ScriptableObject来做数据持久化,有点画蛇添足的意思了 本章代码关键字 1JsonUtility.FromJsonOverwrite() ...
U4S2L3——ScriptableObject 非持久数据
U4S2L3——ScriptableObject 非持久数据 本章代码关键字 1ScriptableObject.CreateInstance<>() //在运行时创建出指定继承ScriptableObject的对象,该对象只存在于内存当中,可以被GC ScriptableObject的非持久化数据 ScriptableObject的非持久化数据指的是,不管在编辑器模式还是在发布后都不会持久化的数据 我们可以根据自己的需求随时创建对应数据对象进行使用,就好像直接new一个数据结构类对象 利用ScriptableObject生成非持久化的数据 利用ScriptableObject中的静态方法CreateInstance<>() 该方法可以在运行时创建出指定继承ScriptableObject的对象 该对象只存在于内存当中,可以被GC 调用一次就创建一次 123456789101112131415using UnityEngine;public class Lesson3 : MonoBehaviour{ public...
U4S2L2——ScriptableObject 数据文件的使用
U4S2L2——ScriptableObject 数据文件的使用 本章代码关键字 123456//在继承ScriptableObject的类内Awake() { } //数据文件创建时调用OnDestroy() { } //ScriptableObject 对象将被销毁时调用OnDisable() { } //ScriptableObject 对象销毁时、即将重新加载脚本程序集时 调用OnEnable() { } //ScriptableObject 创建或者加载对象时调用OnValidate() { } //编辑器才会调用的函数,Unity在加载脚本或者Inspector窗口中更改值时调用 ScriptableObject...
U4S2L1——ScriptableObject 数据文件的创建
U4S2L1——ScriptableObject 数据文件的创建 本章代码关键字 123456ScriptableObject //数据配置存储基类,自定义的数据资源文件需要继承它[CreateAssetMenu()] //通过菜单创建资源特性,参数分别是是默认文件名,为在Asset/Create菜单中显示的名字,排序优先级ScriptableObject.CreateInstance<>() //创建数据资源文件的方法,泛型参数为要创建的ScriptableObject派生类AssetDatabase.CreateAsset() //传入要保存的资源文件和存储路径,在指定目录下创建文件AssetDatabase.SaveAssets() //将创建的资源文件保存下来AssetDatabase.Refresh() ...
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() ...
UMVCSL6——Facade和Command
UMVCSL6——Facade和Command 本章代码关键字 123456Facade //Facade基类,任何在PureMVC内作为Facade的类都应该继承该类,可以实现对PureMVC内框架下所有对象的管理facade.RegisterCommand() //注册命令,将通知和命令绑定在一起facade.SendNotification() //发送通知,触发监听该通知的命令和MediatorInitializeController() { } //初始化控制层内容,这里应当为所有的Command命令进行注册SimpleCommand //即单个命令类,所有只负责一个业务且作为Command的类,应当继承该类,他必须要在Facade里注册并于通知绑定Execute() { } ...
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 =...