满打满算,来公司实习也差不多快一个月了。总的来说,是长了不少见识的。令我感触最深的,大概有这么几点吧。

  对Unity这种商业通用引擎提供的各种功能模块有了以前想都没想过(或是不敢想)的想法:原来它底层的实现基本原理就是这个样子呀。这几个模块大致如下:地形——Terrain、动画——Animation、背景动画的云层飘动或是水流、岩浆的流动等UV偏移。另外,一位同事大神给予了一些非常宝贵的意见,对我的帮助非常大,这里匿名道谢一下。下面是对以上几点详细说明一下。

  地形,就是对一块大的Plane用高度图来将平面位置的高度表现出来,形成高低起伏的地貌特征。高度图,Unity可以在抬高、降低地平面之后形成起伏地形的时候将高度图导出,这样,在分辨率,Terrain的长宽高和之前相同的时候可以重现原来的地形。但是,只说到这貌似没什么卵用,因为Unity自带的Terrain中的网格太多,太耗资源了。但是有一些插件,可以将地形导出三维模型,在建模软件中建好将网格调好,然后导入Unity中去。至于地形中的草皮植被树木,肯定是使用贴图和模型来搞喽,具体怎么处理,我还没有研究,留到以后再考虑吧。

  动画,使我对游戏制作有了更加深刻的了解了。以前,碰到根动画和其父对象有相对位移的时候,我习惯上总是取消根动画,但现在的处理方式要比之前高明多了。我可以将角色动画中的三个位置动画曲线的关键帧存储下来,然后将PosX和POSY的动画曲线归零。这样的效果就是取消根动画喽。但是在运动时将根对象的父对象在某个时刻的位置按时间插值在关键帧之间计算,得到在建模软件调动画时的位置,这样会更加真实的。当然,这种矫正是在要求强烈打击感的动画时使用的,在使用行走这种单调重复的动画时,直接取消根动画也是不错的选择的。

  最后,说一下背景图片的UV偏移所造成的动画效果。我看到的有两种比较简单的方式:第一种就是使用NGUI中的脚本,具体名称忘记了,就是改变材质球的UV偏移的。第二种是在Animation中改变游戏对象的materia中的mainTex的z坐标和w坐标,一个控制水平偏移,一个控制垂直偏移的。这种我认为比较简单好用,也不需要写脚本也不需要调用脚本。当然,如果你想自己实现,通过写shader当然也不难实现的。

  今天晚上,得到的一个建议:就是尽可能脱离Unity提供的API,自己实现一些通用性强的代码。例如,游戏人工智能变成精粹中的C++代码,将其翻译为C#代码,并且自己组织其中的类层级关系,既可以增加编程能力,又可以对面向对象的特性有深刻的了解,使用这种方式提高自己。就在上个星期,一直想这样搞,但是,写了一点点就想放弃,因为类有点多。 如果不克服对代码这种组织方式的恐惧,或者说是不适应,编程的瓶颈就不可能突破的。这种瓶颈已经困了我半年了,应该对自己狠一点,突破它,向更远点地方翱翔吧。 加油,使向往的风景,成为走过的路,欧耶。