《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点。在这种骨骼结构下,当父节的骨骼点位移,旋转时,子节点的骨骼也同时相对于父节点位移和旋转。所以骨骼点之间的结构就是父子关系或平行结构关系。

思路探讨(二十四) 要勇敢的相信自己

你是很厉害的人物,就像是无所不能的一样,但凡你接触到的都能成功搞定。

我很确信的知道所有看我文章的读者都是很聪明的人,我认为你们就应该这么认为自己。

我为什么要这么认为?

因为我知道人与人之间的区别就是思想上的区别。你在想什么,怎么想的,决定了你的现在和你的未来。

就比如现在我就是这么认为,你们是很聪明的,很棒的,很有能力的一群人,我认为读我的文章的人,都是这个世界上很厉害的人,无论你们来自哪个地方,都那个地方的佼佼者。

这也同时映射出我是很棒的,是聪明的,是厉害的人。

我不是反夸自己,因为我相信自己是个厉害的人物,是个聪明的人,是个很棒的人,不论现在是不是,未来一定是。在变成未来那个很厉害的人之前,所有阻碍和困哪,都不值得去太在意。

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

上一篇介绍了一些3D模型的渲染基础知识,并且将这些基础知识运用在了3D模型的切割、拉伸、扭曲当中。

技术原理是最重要的核心点,人只要理解了技术原理,就能将技术表象解释清楚,在实际项目中将这种技术运用自如。
实际中并没有这么容易,理解和运用自如之间,还是有一段很大的差距的,在实际项目过程中,理解只是理解,只是能解释这种表象是如何发生的,运用自如,则是熟知了原理的优缺点,不再对这种技术有任何的偏见,能做什么不能做什么,做什么有什么优势,有什么有什么劣势,有了更加深入的理解,当没有了这么多的偏见,运用起来自然得心应手。
理论上说,我们每个人把所有精力先放在理解原理上,然后再去做技术实现不就轻松了吗。理论上是这样的,但人类头脑的进化毕竟还没到那么高级的程度,还不能轻松的把抽象的事物短时间内在脑中有条不紊的整理清楚,这还没把人的情绪影响算进去,人性毕竟是弱点多于优点的,虽然表面上能处理一些看上去相对复杂的事物,但从学习知识的角度看,人类的大脑还是不够高级,说实话应该说是有点低级。
对于这么低级的大脑,我们只能通过反复的学习,然后实践,再学习,再实践,很多遍后才能对原理的理解推进那么一点点,我们也只能依靠长时间的、漫长时间的、很长很长时间的磨练,从有兴趣到放弃,再重新拿起到再放下,再拾取再举起再抛向天空,反反复复但始终不离弃,才能最终到达运用自如的境界。人之间没有聪明与不聪明之分,有的人善于思考,善于举一反三是因为前面很长一段时间他都一直在练习这种多思考和举一反三的方式,当我们看到他时他的思维方式已经成型,这些并不是先天就有,而是通过后天努力得来。天才这东西,不管它是否真的存在,我们都应该忽略它,转而更加专注于自己的努力上。