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

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

3d游戏开发实训结项总结相关推荐

  1. 智能楼宇3D虚拟仿真实训平台

    智能楼宇3D虚拟仿真实训室 智能楼宇3D虚拟仿真实训平台 平台概述: 智能楼宇3D虚拟仿真实训平台,是建立在现实建筑智能化工程基础上,利用3D虚拟现实技术,依托于3D虚拟Unity平台通过模拟或还原现 ...

  2. 3D游戏开发套件指南(入门篇)

    今天将介绍最新的3D游戏开发套件.不论是使用2D还是3D游戏开发套件,都可以在不编写任何代码的情况下,通过设置与拖放便能快捷的实现游戏创意. 指南简介 本指南将引导开发者设置一个空的场景,使用3D游戏 ...

  3. DirectX 12 3D 游戏开发与实战第五章内容

    渲染流水线 学习目标: 了解用于在2D图像中表现出场景立体感和空间深度感等真实效果的关键因素 探索如何用Direct3D表示3D对象 学习如何建立虚拟摄像机 理解渲染流水线,根据给定的3D场景的几何描 ...

  4. Unity3D ——强大的跨平台3D游戏开发工具教程

    http://unity3d.9ria.com/?p=22 众所周知,Unity3D是一个能够实现轻松创作的多平台的游戏开发工具,是一个全面整合的专业游戏引擎.在现有的版本中,其强大的游戏制作功能已经 ...

  5. java坦克大战 实训报告_坦克大战系统《Java程序开发实训》综合实训报告.doc

    坦克大战系统<Java程序开发实训>综合实训报告 <Java程序开发实训>综合实训报告 题目: 坦克大战系统 姓名: 方庆 学号: 2010203206 班级: 10软件(2) ...

  6. Android+3D游戏开发技术详解与典型案例

    内容导读 本书共分两篇,第一篇介绍了Android 3D游戏开发的基础知识,主要对OpenGL ES的相关内容进行了介绍. 章 名主 要 内 容 第1章 英雄还看今朝-Android简介本章介绍了市场 ...

  7. Android实训内容及过程,Android项目开发实训大纲.doc

    Android项目开发实训大纲Android项目开发实训大纲 黎明职业大学信息与电子工程学院 <Android项目开发> 实训指导书 2014年6月 <Android项目开发> ...

  8. 3D游戏开发基础-姜雪伟-专题视频课程

    3D游戏开发基础-23042人已学习 课程介绍         该课程从游戏开发基础知识讲解,包括向量,矩阵,以及固定流水线,可编程流水线,GPU编程等,通过该课程的学习可以让大家对游戏开发原理以及游 ...

  9. 郑重告之:智能合约开发实训营第4期学员招募正式启动!

    各位同学,抱歉久等了- 这是终于到来的<以太坊智能合约全栈开发>实战特训营第四期的正式招募通知. <以太坊智能合约全栈开发>实战特训营是由硅谷密探和 celer network ...

最新文章

  1. python下载安装教程3.8.1-Linux安装Python 3.8.1
  2. 【Linux 内核】实时调度类 ③ ( 实时调度类 rt_sched_class 源码 | 调度类 sched_class 源码 )
  3. 实验室机器OracleXE客户端连接远程Oracle服务器
  4. 第2年,倒数第3天,1.5万票,感动!
  5. ASP.NET Core 借助 K8S 玩转容器编排
  6. JavaWeb学习笔记——Tomcat配置
  7. ubuntu安装sqoop1.4.7
  8. webpack vs gulp 一张图说明
  9. wdlinux LAMP
  10. 献给自己技术成长的第二年
  11. 用C++程序理解汉字的机内码表示
  12. 动物识别论文整理——一种基于生物特征的鱼类分类模型
  13. 基于docker搭开源iredmail邮箱服务器
  14. 发生异常: ModuleNotFoundError No module named ‘XXXX‘可优先尝试的解决方式
  15. Qt连接MySql驱动加载失败问题解决方法
  16. spring事务传播级别
  17. 电脑PPTP更换IP教程
  18. android多点触摸事件,Android多点触控
  19. 小程序picker用法
  20. 商品评论信息与评论信息分类

热门文章

  1. 党员管理系统 spring boot
  2. SendMail 发送邮件
  3. 基于Android studio健身器材维修预约系统java
  4. 供应链中物流及信息流管理
  5. linux sendto recvfrom 异常退出,linux c学习笔记----UDP基础客户/服务编程(sendto,recvfrom)...
  6. 购物网站毕业设计 (高配版)
  7. XSS漏洞分类及危害
  8. Java动态数组和静态数组详解
  9. BI与报表的前世今生
  10. Kettle连接Oracle