技术标签: unity模块切换
本系列基于:BDFramework 、Unity3D 2018.4.0
BDFramework:Simple! Easy! Beautiful! This is a powerful Unity3d game workflow!
框架地址:
第九艺术 、第十艺术讨论群 : 763141410
0x001.问题提出:
注:这里的Timeline 不是unity2018的timeline。
游戏开发过程一般都是模块化开发。这里的模块指的是广义上相对隔离程序逻辑的模块,如:登陆,PVP战斗,PVE战斗等...
于此同时就会涉及到模块管理和模块划分。这个就是比较麻烦的问题,
比如:游戏主界面上,n多按钮,每个按钮又是一个弹框功能。很多同学,为了效果流畅,在进游戏前,就把ui加载好了。这个时候要进游PVE模块,需要把部分ui进行删除卸载,给PVE预留内存空间。
想想,如果没有合理的划分模块和管理模块,那么就是一堆if else,针对每个情况进行处理。
一但游戏复杂,那么将会是噩梦。
0x010.解决方案:
BDFramework 针对这些逻辑,采用时间片的管理策略。这里的时间片,指的是按照用户使用流程进行划分模块。
1.进游戏、下载资源,资源加解压,登陆, 这个可以看成一个时间片,就是一个模块。
2.游戏大厅,和大厅上所有的按钮,以及按钮对应的窗口,这个也作为一个模块。
而我们平时说的,商城模块,换装系统,在时间片的划分里,其实就只是一个ui窗口而已。
这样回头想想,这样的一个个模块,用户同时只会处于一个状态,在这个状态里,可以把其他模块给卸载干净,update也停掉.这样的一个流程,就是TimeLine了,其实就是按照用户的使用流程,进行合理的划分模块。
具体的划分还是要交给具体的开发者。
0x011.翻代码 翻代码:
i)看代码先看接口:
这里就是一个模块的生命周期。BD里的模块,其实就是一个ScreenView,这个可不是一个窗口的意思。
这个就代表了一个时间块,BD永远只会执行一个时间块,会停掉其他的时间块的Update。
ii)看一下模块的实现* 拥有ScreenView标签的会被自动注册
* ScreenView标签有第二参数,如果为True,则是默认进入该模块
这里是笔者项目中战斗模块,其实很简单,只有加载战斗逻辑、战斗UI。
而退出的时候,调用接口ScreenViewManager.Inst.MainLayer.BeginNavTo("hall");切换了模块。
而ScreenViewManager 其实是一个状态机的设计,有兴趣的小伙伴可以去了解下。
ScreenView可以理解成:一堆功能的集合,不建议做很复杂的业务功能。
0x100.题外话:
有些小伙伴已经注意到,笔者的Update里面没任何逻辑。BD的设计是:全局只有一个mono脚本,作为生命周期的执行器。
逻辑层和渲染层拆分的很彻底,所以逻辑层基本上不会用到Update!
以防万一,还是实现了Update的接口。
自此模块的调度、切换、设计,就这样结束了。
最终还是要使用者自己把握ScreenView的颗粒度,做多少东西。
大厂面试爱问的HashMap死锁问题,看这一篇就够了JDK 1.7 HashMap源码分析put()方法addEntry()方法resize()方法transfer()方法(重点)死锁演示如何规避使用Hashtable 或 ConcurrentHashMapJDK1.8的升级和仍存在的死锁问题升级内容仍可能存在死锁问题经历过大厂面试或者有所了解的同学都应该知道,HashMap是面试时面试官特别喜欢的问题,除了HashMap的扩容方式,为什么扩容的2的次幂等以外,还经常会问到HashMap死锁的相关问题。最
上篇我们分析了ArrayList的底层实现,知道了ArrayList底层是基于数组实现的,因此具有查找修改快而插入删除慢的特点。本篇介绍的LinkedList是List接口的另一种实现,它的底层是基于双向链表实现的,因此它具有插入删除快而查找修改慢的特点,此外,通过对双向链表的操作还可以实现队列和栈的功能。LinkedList的底层结构如下图所示。F表示头结点引用,L表示尾结点引...
1.常引用用const声明的引用就是常引用。常引用所引用的对象不能被更改。经常见到的是常引用作为函数的形参,这样不会发生对实参的误修改。常引用的声明形式为:const 类型说明符 &引用名。常引用作为函数形参的例子如下: #include "iostream" using namespace std; // 常引用作为函数形参,保证了不会对实参的值进行误修改...
网桥也称桥接器,是网段与网段之间建立连接的桥梁,是OSI七层模型中数据链路层的设备。它根据MAC地址来转发帧,可看作一个“低层的路由器”。
饿汉式:package com.xyz.bean;/** * 饿汉式单例设计模式 * 私有化静态final 属性 * 私有化构造 * 提供public static 的genInstance方法 */public class Singleton1 { private static final Singleton1 singleton1 = new Singleton1...
首先,感谢网络上国内外各位大神,我只是依葫芦画瓢的做了试验实现了基于树莓派的DLNA和Airplay无线音频传输的功能。因为过程中也走了弯路有些问题,所以这里也只是来记录一下操作过程,整个实现方法和过程并非原创,特此声明。我使用的是树莓派3 B+版本硬件,系统为官方Raspbian的最新版本系统,如下:$ lsb_release -aNo LSB modules are availabl...
BIOS中断号BIOS字体及颜色属性INT 10HAH=02H 设置光标位置AH=06H 按指定范围滚动窗口AH=13H 显示字符串INT 13HAH=00H 重置磁盘驱动器AH=02H 读取磁盘扇区BIOS字体及颜色属性INT 10HAH=02H 设置光标位置BIT属性0~2字体颜色( 0:黑, 1:蓝, 2:青, 4:红, 5:紫, 6:棕, 7:白)3...
文章目录文件操作相关的模块fetch模块copy模块file模块blockfile模块lineinfile模块find模块replace模块实验环境:172.25.2.10 server1 ansible软件主机172.25.2.11 server2 受管主机1172.25.2.254 server3 受管主机2文件操作相关的模块fetch模块1.2.再次执行相同操作时3.co...
当使用xib,并使用了AutoLayout之后,当需要适配机型时,或者手动更改视图的frame的时候,就需要修改约束啦.其实很简单的. 1.首先从xib中吧改变的约束拖到view上或者ViewController上 @property (weak, nonatomic) IBOutlet NSLayoutConstraint *topLayout;机型封装到单例中 全局都可以使用+ (UISc
4.2 情感分析的资源建设 4.2.1 情感分析的语料 除了4.1节中三个国际/国内评测所提供的语料外,不少研究单位和个人也提供了一定规模的语料. 1. 康奈尔大学(Cornell)提供的影评数据集(http://www.cs.cornell.edu/people/pabo/movie-review-data/):由电影评论组成,其中持肯定和否定态度的各1,000篇;另外还有标注了褒贬极性的句子各
原地址:http://tieba.baidu.com/p/2807225555我觉得有三点感觉在导出时比较重要的1.单位的设置3dsmax系统单位设置就设成厘米显示单位公制也设成厘米这样在max里的一网格就是10厘米,像这样子但感觉不是很理想,我这把枪太长了差不多占了6个网格,OhNo这样子就有60厘米长了,我得给它来个整体的缩放,我要把它缩放成1厘米这样到unity就是1米刚好,可...
1 概述本次任务是基于飞思卡尔i.MX 6DualLite开发板上调试触屏驱动,触屏芯片是Goodix的gt911芯片,触屏接口是I2C。操作系统:android 4.4.2内核版本:3.0.152 调试步骤2.1、硬件连接imx6和触摸屏的连接如下图所示从原理图可看出I2C2_SCL-