《Unity3D高级编程之进阶主程》第十章,地图与寻路(三) 地图编辑器

对于任何游戏来说,地图与场景的是比较重要的,特别是对于中大型游戏来说,在地图和场景上花费的时间和精力占去了大部分。而对于大部分游戏类型来说,布置场景,优化场景,甚至为场景写个编辑器是必不可少的,我们通常称他们为‘地图编辑器’。

地图编辑器有哪几种实现方式,该如何实现,顺便讲一讲从哪些方面下手优化场景,我们这节就来讲讲关于地图的事。

《Unity3D高级编程之进阶主程》第十章,地图与寻路(二) 寻路网格的构建

寻路网格构建

上一节我们了解了A星寻路的算法及其优化,A星寻路只是算法,需要配套的模块和工具链支撑,单独的一个A星无法运作因为它只是一个算法。

需要什么样的模块和工具链呢,我们这节就来讲一讲,最重要的配套模块‘寻路网格构建’。除了网格构建外,还有动态障碍物,以及地图和地形的构建,最后再配上A星寻路,才形成最终的地图和寻路。

《Unity3D高级编程之进阶主程》第六章,网络层(六) - 网络同步解决方案

当前网络游戏中网络同步方案有三种,即状态同步,预测信息同步,帧同步。三种方式并不是完全互相排斥的,很多时候我们在开发的时候,为了能都让游戏显得更加逼真,会让多种的同步方案一起使用。例如魔兽世界这种开放世界的多人在线RPG游戏,就使用了状态同步和预测信息同步两种方案,绝地求生、和平精英等战地竞技类游戏,也同时使用了状态同步与预测信息同步方案,而传奇世界、热血传奇等传奇类游戏因为不需要预测信息就只使用状态同步,王者荣耀等一批5v5地图类竞技游戏则使用了帧同步方案。

思路探讨(二十五) 困境中的中产

还是聊聊关于钱的事吧,人生哲学聊多了也没什么立竿见影的效果,能理解的瞬间就能懂,理解不了也只能等那灵光一现的时候。

思路探讨(二十六) 我们真的聪明吗

更多时候,我们不是败给了外界,而是败给了自己。

《Unity3D高级编程之进阶主程》第十章,地图与寻路(一) A星算法及优化

寻路一直是游戏项目中的热门功能,寻路算法用的最多的就是A星算法,其他也有,比如 Dijkstra算法 与 Floyd 算法,但是他们的在时间和空间上的复杂度都太高,Dijkstra算法时间复杂度为O(N^2),空间复杂度也是O(N^2),Floyd的时间复杂度更高有O(N^3),空间复杂度也在O(N^2),这种复杂度的算法寻路算法如果应用在游戏中稍微大一点的范围、大面积、稍微高一点的频率的寻路需求是CPU是无法承受的。

《Unity3D高级编程之进阶主程》第六章,网络层(五) - 剖析数据协议原理

协议包的格式,json, msgpack, protobuf 以及自定义格式

项目的网路层在建设中,除了选择长短连接TCP,UDP,HTTP方式外,还需要选择在传输过程中使用什么样的协议格式。

前面分析了TCP,UDP,HTTP的原理与应用,现在我们来了解下在传输层和应用层之上的逻辑层中,信息传递格式的选择与利弊。

我们将深入剖析JSON,MessagePack,Protobuf的原理,包括它们都是由什么组成的,怎么序列化的,怎么反序列化的,数据格式究竟是由哪些元素构成的,使我们对网络数据协议的理解更加透彻清晰。

我们以最常见的JSON格式作为切入点,一步步深入了解更加有效却复杂的传递格式。

《Unity3D高级编程之进阶主程》第六章,网络层(四) - 封装HTTP

HTTP协议原理

HTTP俗称短连接,由于其连接的时间较短,不受前端所控制,所以在互联网开发圈内,通常被以‘短’字开头。

在Unity3D短连接可以用.NET库来编写,也可以用U3D的内置API的WWW来写。差别不是很大,WWW对.Net做了封装,其功能已经完全够用在游戏开发上了,即使有情况不够用再用.NET补充也是很容易的事。(WWW在2018及以后的版本中都被废弃了,取代它的是UnityWebRequest,应该说封装的更好,但自定义部分则被削弱了。)

其两者的区别主要还是WWW把.NET库封装后再加了层用协程使得我们开发者在使用时更加的便捷,.NET库则直接用了线程,导致开发者还需要关注主线程与子线程的资源锁。另外WWW里面已经实现了IP6转换,而使用.Net库则还需要自己解析IP6地址,虽然对程序员来说自己用.NET实现更加接近底层实现,但同时也带来了更多需要花精力关注的地方,夺走了程序员些许宝贵的精力。

不管协程还是线程,其实两边都需要缓存和队列,如果没有缓存和队列,当网络请求量放大时就会出现数据丢失的情况。所以缓存机制在网络层是不可或缺的。

《Unity3D高级编程之进阶主程》第五章,3D模型与动画(四) - 3D模型的变与换4

前面讲解了些骨骼动画的基础知识,我们在基础知识上可以理解骨骼动画的原理。在骨骼原理之后,我们又对人物模型动画的换皮换装的原理了剖析一下,因为有了骨骼动画的基础知识支撑,我们在对换装换皮的方法和技巧上理解起来就更加的清晰了。

其实看一遍是不够的,要看很多遍,而且要边想边看边实践,这样才有效果。要不怎么说理论这东西用处不够大呢,如果只有理论,那么这就是纸上谈兵,解决不了实际问题,反过来也是一样,只有实践则无法彻底了解原理和机制,我们就无法精进,总是觉得有什么东西被蒙在鼓里,运用起来不能得心应手。

《Unity3D高级编程之进阶主程》第五章,3D模型与动画(四) - 3D模型的变与换3

简单叙述下上篇的内容。

上篇我们了解到,一个简化模型的算法,以及普通网格和蒙皮网格的区别。其中蒙皮网格是专门用来制作动画的,它除了普通网格所需要的顶点,三角形,uv数据外,还需要骨骼数据,和每个顶点的骨骼权重数据。

其中骨骼动画是由骨骼点组成的,每个骨骼点之间的关系,要么是父子关系,要么就是平行的兄弟关系,要么就是没有关系,这些骨骼点在Unity3D中对应到模型上的GameObject点。在这种骨骼结构下,当父节的骨骼点位移,旋转时,子节点的骨骼也同时相对于父节点位移和旋转。所以骨骼点之间的结构就是父子关系或平行结构关系。