3d游戏开发实训结项总结

     学校的3d游戏开发实训在历时一个多月之后终于告一段落了,回顾整个实训的过程,自己主要承担了游戏客户端大部分的开发任务,包括角色和镜头的控制,AI逻辑的实现等等,也在实际的编码过程中锻炼了技术。在前期还算可以全身心投入到项目开发,到了后期由于要同时处理其他课程的实验和大作业就有点应付不过来了,但是无论如何,整个游戏的开发过程算是比较成功的。

        在实训当中的主要收获,一是积累了很多Unity引擎的使用经验,二是积累了游戏项目开发流程和版本管理的经验。

 

首先,Unity引擎虽然比较简单,但是使用起来还是要很讲究的,简单总结一些实训时踩过的坑和查资料时学到的干货:

1.Awake()和Start()函数:这两个函数用于Unity脚本组件的初始化,Awake()在游戏对象初始化之后执行,Start()函数在组件执行第一次更新之前执行,一般来说当初始化的内容有依赖关系时,先初始化的放在Awake(),后初始化的放在Start();

2.当初始化内容的依赖关系比较复杂时,可以设置各个脚本初始化的顺序:Unity菜单->Edit->ProjectSettings->ScriptExecutionOrder,设置脚本的DefaultTime,脚本按照DefaultTime顺序初始化,暂未发现具体用法;

3.OnTriggerEnter()和OnCollisionEnter()函数:这两个函数用于做碰撞检测,两者不能同时被触发。当两个带有刚体组件的游戏对象碰撞时,双方进入OnCollisionEnter()函数,而当其中一个对象的碰撞体为IsTrigger,则触发OnTriggerEnter()函数,发起碰撞方需带0有刚体组件,此外经测试带有CharacterController组件亦可;

4.Unity的协程:简单来说,当你希望你写的整个函数不要在一帧里面全部跑完(像Update()函数那样)时,开协程,用yield return语句控制协程在不同的时刻执行;

5.Unity一帧内协程的执行在主要的更新函数之后;

6.想重新启用一个已被禁用的游戏对象时,一个很愚蠢的做法是在该对象的脚本写上gameObject.SetActive(true);语句;

7.当禁用一个游戏对象时(SetActive(false)),会顺带把这个对象开启的协程给停止掉,且重新启用时不会复原;

8.pivot与center问题,pivot是自己给游戏对象定一个中心,center是Unity帮你给游戏对象定一个中心,用法实例:在场景中做一个作圆周运动的物体,先在圆心创建空对象,设为(pivot),并添加transform.rotate的动画,再创建一个子物体放到圆周上任一位置,这个物体就能作圆周运动;

9.Unity的数据结构:基本上就是用List,但是注意不能直接修改List中的元素,往深了说就是C#值类型和引用类型的问题,当获取List中元素时它传过来的是一个值而不是引用;

10.Unity的回调函数:使用delegate关键字;

11.Unity脚本中new东西太频繁有可能会触发C#里面一个叫GarbageCollection的东西,造成卡顿;

12.查看Unity项目运行时计算机硬件资源的占用情况:菜单->Windows->Profiler。

 

然后是项目开发和版本管理方面的一些心得:

1.游戏项目开发的流程:一般就是策划、设计、编码、测试等等;

2.游戏开发采用的“策略”:如果可以,尽可能采用敏捷开发(或称迭代开发),先实现核心功能,再一步一步地添加新功能或者优化,保证项目的开发在可控范围内;

3.使用版本管理工具进行团队协作开发:以Github为例,首先创建一个主分支,然后每个成员各拥有一个自己的分支,提交代码时,先将主分支的内容归并到自己的分支,确认程序正确(并处理完可能有的冲突)后,把自己分支的内容归并到主分支。为避免冲突成员在开发时应时常从主分支更新自己的分支;

4.重视软件的设计和架构,最好的话能编写出设计文档并用它来指导项目开发,通过好的架构来减少代码重复、减少耦合,进而预防潜在的Bug,减少变动的成本。

 

本次项目实训自评:

1.做得好:

(1).明确自己的岗位职责:虽然做的东西比较杂,但总体离不开“客户端开发”,有余力时,与策划美术沟通、Review队友的代码、协助Debug;

(2).没有匆忙编写代码,而是结合当前功能模块的实际,认真做好类图设计后再开发,磨刀不误砍柴工;

(3).一边开发一边学习,有刻意去深入了解Unity的一些底层和机制,遇到问题能够从这个角度分析原因。

2.要提升:

(1).使用版本管理工具的经验不足,经常碰到无法解决的冲突,最糟糕时不得不从主分支上完整Copy一个副本到自己分支;

(2).项目开发时过于关注自己负责的功能,缺少大局观,有时候自己的工作成果却强行给队友的工作增加了难度;

(3).项目前期实现了基本功能(待优化)在后期希望进行优化时发现难以改动(因为要改的东西比较“底层”),不了了之。

3.落地点:

(1).多熟悉版本管理工具的使用,了解每一个功能的作用和用法,同时了解自己的队友现在在做什么,避免对相同地方的修改(冲突);

(2).要对整个项目有一个整体的认识,同时多沟通,了解队友的工作内容,尽量做到好好配合;

(3).开发底层的功能时还是要首先注重质量,不能太心急就进行下一步的开发。时间充裕的情况下,实现这些底层功能时尽力去优化,追求性能的极致。

 

实训结束了,然后漫长的实习旅程开始了......

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值