zoukankan      html  css  js  c++  java
  • 卡卡捕鱼项目更新内容复盘总结

      一:回顾目标

      卡卡捕鱼是我职业生涯中的第一个项目。当时立项时,自信满满的规划好了各个模块所需要的时间,信心满满,踌躇满志,目标是提前一周左右完成。期望是能够通过这个项目养成更加良好的代码习惯,收货更多经验。做出比我之前的项目效率高,代码结构更加清晰的游戏。

      二:评估结果

      1.时间上的问题

      时间上没有达到目标,但我总结并不完全是个人原因。第一次工作没有经验,这次项目让我了解了企业中商业化游戏的制作过程,这和我一个人制作独立游戏是不同的,在企业中是一个团队,大家很多人一起完成一个游戏,并且代码还要具有复用性,具有和项目中其他内容兼容不冲突的特点。工作量的繁多导致资源产出缓慢,到结项日结束后的半个月,资源都还没有做完,这不延期是不可能的。所以以后要事先预料好这种情况,在立项之初大家做好沟通,资源空缺期,我要找到自己的事情做。可以在网上学习了解新技术,提高能力,优化我们的项目。

      2.技术上的收获

      由于这是我跨入职场以来的第一份工作,第一个项目,说收获不大那是不可能的。这3个月来我从一个做小游戏的大学生,到现在也可以游刃有余的对捕鱼客户端服务端进行更新修改了。在最主要的Unity和C#方面,我的代码习惯个人认为有了比较大的提高,撰写了不少的注释,并且学习了MVC等设计模式,让我的代码比工作之前干净了许多。学习了对象池之类的优化方式,让我的数据结构能力有了一定提升,以及对优化有了初步的理解。对UGUI的应用更加熟悉,这次更新涉及到了捕鱼的所有UI模块,我把捕鱼的UI都搬到了新的框架中。这3个月过去我感觉自己和Unity联系的更加紧密了。

      C++方面从之前只简单看过C++,几乎已经忘光的水平,到现在也可以进行捕鱼服务端C++代码逻辑的编写。这与主程浩哥分享给我的学习经验和资源,教授我的知识以及我自己的刻苦钻研都是密不可分的。

      由于资源短缺导致的项目长时间空缺,以及前期我在家没有其他事要忙,我在休息时间,空闲时间也学习了一些技术。比如C#基础的书籍,我已经初步阅览完毕。还有在公司时间自学的UnityShader,我学习了一些引擎底层的知识,渲染管线流程,CG语法,并且写出了一些比较简单的Shader。还有兴趣所向的在家里学了一点Lua和像素画的知识,这些技能都会对我的游戏开发水平有一些提高,只要不断积累,总有一天可以大有所获。

      3.新添加的内容

      预期和结果总是相差不小的,其实新添加的需求并不多,也不大,例如散弹枪和技能提示框之类的小需求。但是没有预期到的坑才是可怕的。我印象比较深刻的有安卓端输入法这个坑,读取AB包音效错误的坑,云娃SDK版本问题的坑等等。

      三:叙述过程

      1.技能上的修改,散弹枪和追踪弹

      散弹枪是立项当天晚上波哥新提的需求。需要散弹枪。还有瞄准功能需要追踪。

      散弹枪的实现一开是是让我先想到复习向量知识,但是后来在网上找到了三维向量坐标计算器。我就自己完成了制作,实现思路是计算出了坐标,并且给炮口添加了两个新的发射点,开启散弹枪时,三个发射点都发射炮弹。

      

      散弹枪消耗3倍的金币

      

      同时在各个位置发三发炮弹

      

      追踪弹

      这是一个看起来好像挺容易其实坑很深的需求,由于需求和以前的自动瞄准变化较大,但是又要在原来的基础上修改,导致了不少问题,废了不少心思才完成了这个需求

      通过瞄准技能的寻找鱼方法逻辑利用委托事件得到鱼的位置后进行各种坐标转换达到了给子弹一个方向的效果

      

      期间为了避免和散弹枪导致子弹重叠的问题,改变方向使用了协程加延迟的方法

      

      2.一开始没有美术资源时,我是先按照策划案做出了捕鱼的弹幕功能。刚开始自己写了一个对象池,后来浩哥说用AudioController的对象池,然后我写的就没有用到。但是这绝不是白写的,自己写一个简单的对象池让我对对象池的原理有了更加深刻的理解。

      

    自己写的对象池主要就是一个队列,里面是项目相关的增删改查方法,现在看来,复用性不够强,如果要优化的话应该把项目相关的类都去掉。对象池应该只有存储和取出的功能,游戏相关的内容应该交给外部处理,这点就体现出了AudioController的对象池有多好。

      3.弹幕预制体

      这个代码给浩哥检查纠正过不少次,浩哥要求我使用委托与回调等,这样把显示控制数据分离开。我开始学着使用以前做游戏几乎躲着不用的委托和回调

      对于弹幕的重叠问题,也是很让人头疼的一处。我最终使用自己试验和想出的逻辑添加了一些bool并检测每个弹幕的位置来避免重叠。由于弹幕的变化繁多,靠固定的规律并不能控制住弹幕的重叠,只能检测我屏幕中的弹幕位置

     

       4.如何检测弹幕的尾部是否离开屏幕边缘了呢?

      对于弹幕这种东西,其实就是一个Text,我一开始不知道preferredHeight这个属性,所以很麻烦,后来浩哥告诉我每个Text的宽度是可以实时获取的,我在搜索引擎上找到了这个东西,于是完成了这个方法。避免了弹幕的重叠。期间出了不少逻辑问题,很让人头疼,好在最后都解决了

      5.拼接了原始的弹幕聊天历史记录面板,这是原始版本,为了让两个按钮插到文本中间,文本预制体又自动排序并且文本又实现底色什么的还是很麻烦的。费了很多心思做出来后,需求改了。。。但是仍然有了关于UGUI的许多收获。解决方案浩哥给了参考,在这里

    https://docs.unity3d.com/Manual/HOWTO-UIFitContentSize.html

      然而最终的效果图是这样的,进行了界面的拼接以及逻辑处理,并且与我的弹幕消息系统进行了对接。期间各种位置的调整和UI的BUG虽然麻烦,但是没有太高技术含量。忽略不计。。。

    6.云娃语音SDK

      浩哥给了我云娃的网站,让我下载了SDk观看文档并且使用,由于捕鱼和麻将的需求有所不同(捕鱼需要进行语音识别)所以我为捕鱼单独写了一个共同管理语音播放和其UI动画逻辑的类。这些都是云娃官方提供的接口和单例,没有难度。看说明书使用即可。坑就是只有移动端可以测试,在换新项目前,打包真的是很苦。当初因为版本的问题迟迟无法初始化成功,现在用了新版本这些问题已经解决。

    7.聊天

      宿哥提供接收聊天和发送聊天方法,我只要在我的弹幕系统和我的UI面板中嵌入即可。

    8.任务功能

      任务功能,大的部分在宿哥的服务端完成,客户端只能接收任务和接收任务完成的消息。后期美术给了任务完成特效并完成了添加,任务功能没有什么好说的,无非就是接收,更新面板,完成获得奖励等逻辑。

      但是完成这个功能中发挥了之前浩哥教给我的MVC设计模式。

      唯一的坑是那个会崩掉服务器的断言,现在宿哥已经将其修改完成。

    9.重头戏 聚宝船

    聚宝船应该是这次更新中最有含金量的一个需求

    服务端:首先,浩哥修改了服务端鱼类的框架,创建了聚宝船类来继承鱼基类。聚宝船发生各种状态改变时产生的逻辑是由我编写的,经过多次计算试验实现了需求。

     聚宝船的出现与金币上传相关代码

    在游戏开始时我添加了计时器,让用户在进入游戏一段时间后把用户的ID添加到宿哥那边的队列。

    另一个循环计时器用于不断检测是否轮到自己产生聚宝船。以此来判断是否产生聚宝船,并且把随机生鱼的方法中的聚宝船和奖杯蟹移除。

    客户端:

    客户端中聚宝盆身上的金币数量和服务端是分开计算的。避免消息过于频繁。我使用了坐标转换的方法,使UI元素跟随聚宝船的船身模型并且实现了分辨率自适应。UIROOT的分辨率为1136*640,对于不同的分辨率设备,需要进行换算来得到相对应的比例以实现全分辨率自动计算自适应

      10.一些特效和音效,配置文件的变化,无需多言,微调。

      11.添加新的鱼和奖杯蟹

      其中只有奖杯蟹略为特殊,我为配置文件添加了新属性,服务端配置文件添加了新模板,实现了奖杯蟹获得奖杯的特性

      

      奖杯蟹进行一些特殊处理,其他鱼在该添加的地方添加,鱼潮中加入这些鱼并且增加一些新的样式

      12.新UI框架的替换

      新的UI框架给捕鱼带来了更好的管理和更高的效率。替换过程中导致了一些问题,主要是层级以及引用和各种优先级的问题,经过我的调整都已经解决。

      13.内存泄露

      这个问题真的浪费了不少时间,最后得知更新Unity版本即可,这个可以忽略,不影响捕鱼加入其他游戏后的运行。

      四.自我剖析

      1.经验不足

      第一次参加工作,有许多不懂的地方,需要勤奋的学习更多知识。更快的融入更高级的工作

      可控因素:不懂的地方可以虚心向浩哥请教,浩哥会耐心回答我或者给我提供一个方向参考让我自己思考。

      其他因素:经验还是要靠慢慢的累积,一口吃成一个胖子不现实,需要平时的多学多练。

      2.间歇性焦虑

      这个情况主要在遇到找不到在哪里先放着的BUG时发生,例如当时任务崩掉服务器,内存泄漏等。总是怕是自己出的问题找不到,会有焦虑感。

      可控因素:要把心态放平和,多和合作的同事交流,比如任务的问题,找宿哥改一下很快就能解决。提升个人能力,积累经验,下次遇到相似问题就不会慌张。

      其他因素:无

      3.代码习惯

      现在虽然比刚进来时好很多,但是还是有时候进行命名或者写注释时不知道怎样做是最合适的。或者有些时候直接用数字应该用变量代替之类的,代码习惯还可以更进一步。

      可控因素:多写代码,无他。

      其他因素:无。

      五.总结

      由于是第一个项目,学到了很多东西,了解了很多东西。我认为这个项目让我收获不小。接触了C++,接触了第三方SDK接入,接触了团队工作的流程。认识了很多新的同事和小伙伴,锻炼了自己的技术能力的同时,也锻炼了自己的沟通交流能力。能和一群同样喜欢开发游戏的同事一起开发游戏是很幸福的事情。伴随着这次项目的结束,我也完成了实习,身份正式从学生转换到了社会人士。刚刚迈入社会的我不论是生活中还是工作中还有许多需要向职场中的前辈学习的地方。由于这是我第一个项目也是实习期的项目,意义和普通项目有所不同,所以说了这么多废话。

      具体学到的东西实在是太多,无法一一阐述,如果笼统的说,我感觉自己现在使用Unity和写代码的感觉更加随和自然了。也没有刚进公司看项目中的代码一头雾水的感觉了。我觉得这和浩哥的教导和我自己的努力都是分不开的。3个月说长也确实不长,但是带给我的收获,和我自己的进步,真的是不小。在做项目的过程中,我在家偶尔也下载试玩其他公司的捕鱼游戏。然后思考那些别人有我们没有的功能如何实现以应对策划可能会提出的新需求。这个项目让我充满干劲和热情。它就是我的初恋,可能即使我十几年后在做3A级大型游戏都忘不掉这个捕鱼,我职业生涯中的第一个游戏。

  • 相关阅读:
    android Animation整理
    js的console总结
    [原创]cocos2d-lua学习笔记(0)-提纲
    【转】js怎么编译成JSC
    【转】PCDuino用python读取GPIO数据
    Mysql数据库大小相关的问题
    oracle with as
    python jar
    investopedia level 2
    warning MSB3391
  • 原文地址:https://www.cnblogs.com/StraussDu/p/7001602.html
Copyright © 2011-2022 走看看