之前所使用的MVC
就跟MVC思想一样,为什么不是MVC框架,如果面试问你用过哪些框架,如果说MVC框架会被打死,因为这个东西就是个理念没有实体,实体比较出名得有Web的Spring框架
MVC简单说就是FPS游戏,你有三个类:
人物属性(血量,攻击,现在的枪啊什么的)叫做模型Model
UI显示(杀敌数,血量显示)叫视图View
人物控制(移动,开火,发信号)叫控制器Controller
三个首字母缩略就是MVC,不过一般都是这么写的,之前也没注意233.
UI的话很久之前用GUI就会绘制和具体逻辑在一个类里然后换一个图片导致逻辑代码爆炸,现在的话有NGUI,UGUI,FrayGUI这样的封装好的,View基本上都能实现,再加上就是界面触发和具体逻辑分离。就是用到了观察者模式事件与监听。
主要是面向对象。
ECS
ECS的话最近比较流行吧,守望先锋用的就是这个。
其实没那么太难的样子,unity其实也差不多类似ECS,
就我们平常需要什么脚本AddComponent不需要就Remove这样
ECS遵循组合优于继承,继承,接口的虚方法打起断点,可能只会到基类,子类重写可能又打不到断点
然后 下面介绍和传统的ECS不同
Entity实体:可以理解就是一个GameObject
ComponentData(Component)组件数据: 一个类中的字段,hp,mp
ComponentSystem(System)组件系统:就是类似一个类中的方法
Group组:主要是存GameObject有多少组件,不需要就Remove
简称ECS
所以ECS是面向数据的,其实面向对象就可以不用思考了。
由于面相数据高并行和C# Job System在大量物体演算时候比GameObject这样的面向对象要好
粘贴个别人图
这样比较好理解
观察者模式,可以被用于在系统间发送事件。
策略模式,算是ECS模式的基石。
然后是即使你是新手用ECS写挂了一个脚本并不会影响到全局,只用把那个脚本重写就行了
但是之前守望先锋发布会时候看到了这个问题,启动应用组件是去遍历这个组,也就是组件越多就速度会变慢,不乏其中某个组件可能还是由好几个组件组成,感觉类似于树状结构,需要在遍历(Duff设备 forr)、查找(二分查找)这方面优化,不过其实查找的话用字典或者哈希就没问题了,Duff估计也用不太到,数据量太小会负优化