视频连接:游戏开发入门系列(一):游戏开发概述
这是看了视频以及一个博主的笔记,自己总结的笔记留存使用。
视频梗概(提炼了一些有用的问题)
- 课程的目标是什么?
- 开始游戏开发之路
- 游戏是如何开发的,开发流程是什么?
- 开发游戏需要掌握哪些技术?
- 我们应该如何学习这些技术?
- 要如何学习这一系列的课程?
- 保持对游戏的浓厚兴趣和激情。
- 主动自学所有细节。
- 通过课程了解专业技能概况,掌握学习方法。
- 通过实战磨练和验证学习的成果。
- 学完这一系列课程应该得到什么?
- 一个粗略的游戏开发知识体系。
- 对游戏开发方法,开发流程有了初步的了解。
- 知道自己离真正的游戏开发者的差距,并且知道如何去提高。
- 一堆练习,一堆demo和一个自己开发的小游戏
- 什么需要你自己去巩固学习?
- 语言的基础
- 引擎的使用或者IDE的使用
- 学校里、书本上、课堂上讲的都需要自己巩固
- 课程中的练习有什么?
- 课堂练习
- 课后练习
- MiniGame
游戏的技术发展(一些经典作品)
- 原始阶段:pong
- 红白机:魂斗罗
- PS、Xbox
- PC单击游戏:仙剑奇侠传
- 局域网对战游戏:魔兽1,dota,红警,cs
- 大型多人游戏:传奇
- 页游:QQ农场
- 手游:Angry Bird
- VR,AR
游戏发展对技术的要求
- 原始的游戏:编程能力和对游戏的认识
- 游戏逐渐复杂,需求变多:程序设计能力、脚本编程技术、引擎技术(封装底层)
- 大型3D游戏:图形图像编程、物理计算技术、动画技术、特效技术、场景及场景管理技术
- 网络游戏:网络通信技术(例如:TCP和UDP,不丢包技术如何实现)、下载升级技术、同步技术(多人游戏时候如何做到一致)
游戏是如何开发的,游戏开发流程
职业分工
- 原始阶段,游戏都是一个或者两个人开发的,既做美术,又做程序,同时自己设计游戏。
- 随着游戏越来越复杂,团队越来越庞大,分工越来越精细,并且各自领域专业性研究更加深入:
- 策划:主要工作是编写游戏背景故事,制作游戏规则,设计游戏交互环节,计算游戏公式,以及整个游戏世界的一切细节等:剧情、关卡、玩法、数值、系统(商城、好友列表)…
- 美术:游戏中一些看得见的实物的表现力:模型、特效、动画、场景、UI…
- 程序:根据策划设定的规则,驱动美术的表现资源,将游戏实实在在实现在电子设备上的人:实现需求、提供团队工具、修复程序中存在的问题、优化基础体验(例如:加载怪物很多的时候,怎么加载;为了避免卡顿,采用什么技术)…
注:游戏程序员是先是游戏人再是程序员。
开发流程
- 讨论确定游戏基本内容、类型等,进行游戏立项。
- 游戏程序员构建最基本的游戏框架(单机或网游、平台)(有些非常简单的游戏demo也可以跳过编程,直接使用游戏引擎)
- 策划对游戏细节进行设计与构建(剧情、玩法、关卡、数值、系统等)
- 程序、美术、策划三方不断的相互沟通完善游戏内容并不断的测试调优(好的游戏都是改出来的),这里策划还将为程序员留出来的接口做各种配置(由于项目需求变化过于频繁)
- 游戏内容基本完成后,需要质检人员开始测试,程序员修复Bug
- 游戏经过一定测试后,发布。同时交由运维人员做基本的维护,发布前期一定有Bug,还需要团队相互配合
简单总结
- 需求产生
- 设计选型
- 程序实现、美术制作、策划配置
- 循环调优
游戏开发需要哪些技术
- 作为一个程序员需要的基本素质:包括掌握基本语言编程,深入了解语言特性,了解计算机相关基础,设计模式。
- 构建一个游戏,需要了解不同平台的相关技术(特别是不同操作系统)。
- 需要有一定的引擎知识,尽可能熟悉引擎各个功能的使用。
- 常见的基本技术(lua等)。
- 随着3D游戏的发展,需要对图形图像知识有一定深度的理解(特别是数学)。
- 网络游戏需要掌握基本网络基础知识(TCP/IP,Socket,Http),了解同步机制。
- 动画技术,基本的物理引擎,基本的场景管理技术。
- AI技术。
游戏程序员负责的内容是什么
- 实现策划需要(大部分是逻辑需求)
- 提供内部工具,加快开发。比如当前引擎不支持某种NPC对象的高亮显示,无法拖拽资源到游戏里面等功能,需要程序员提供,提高开发效率。
- 修复Bug。
- 优化体验,也就是常说的性能优化,提高帧数,减小内存开销等。
目前规模较大的公司,程序员也分为多种(一般分为逻辑程序员和引擎程序员),完成的内容也有一定差别。
逻辑程序:一般属于频繁与策划沟通,直接对项目进行开发的。
引擎程序:一般是研究引擎功能,优化引擎(提升表现,提高性能等)。
游戏程序员是怎么炼成的
- 夯实基础(非常重要)
- 编程基础C/C++,C#,数据结构,算法。
- 操作系统
- 网络编程原理
- 图形学原理
- 程序设计基础(灵活性、耦合性、稳定性…)
- 实践!多动手,从小目标到大目标(非常重要)
- 选择一个游戏引擎,想办法把每个技术运用到实际小的demo中来尝试和理解。
- 不一次性提出无法完成的大目标、量力而行、逐步完成。
- 想办法进入业界,在正式项目中吸取经验。
- 理解原理而不是停留在使用(新手和真正的开发者非常大的差别就在于此)
- 保持好奇心,了解技术背后的原理(例如:unity3d中update顺序控制问题)
- 掌握技术的优缺点,而不仅仅知道如何使用(例如:
- 在技术选型的时候,为什么要选这个技术,而不是另一个;
- 两个数据结构在什么时候使用更好,为什么?比如List和Vector;
- 场景进行组织的时候为什么用八叉树,而不是用四叉树)
- 多总结,多思考
- 将自己遇到过的问题总结,方面遇到后再次查阅
- 试着理解自己做的每一个工作对游戏的影响