游戏开发需要具备哪些技术

news2024/11/25 0:46:35

游戏开发需要具备哪些技术

大家好我是艾西,今天跟大家闲聊一下。开发一款游戏在没有参照物或是底板的情况下开发一款游戏都需要具备哪些技术,在开发过程中我们又会涉及到哪些板块或是领域。

 

一款游戏的开发需要一个总的游戏策划人,为游戏编写背景故事,制定游戏规则,设计游戏交互环节,计算游戏公式,以及整个游戏世界的一切细节等。

和其他程序猿一样,要想做一名优秀的游戏开发者,底子不能差,算法,数据结构,语言等基础一个都不能少。当然,除了这些基本功外,还要对游戏有比较深入的理解,比如看到一个功能就能猜出或给出一个大概的实现思路。

游戏程序员:游戏程序员根据游戏策划人的策划书,不同的游戏需要不同的计算机语言以及不同的游戏引擎进行开发。

比如网络游戏程序,需要用到C++语言,用到cocos2D-x游戏引擎,untiy3D游戏引擎,Dx等技术。手机游戏程序,用到java计算机语言,安卓平台技术,ios平台技术等。

游戏美工:游戏美工主要是游戏原画,2D、3D游戏美工,需要用到手绘,PS,3Dmax等软件。设计与制作游戏中的角色,场景,动画,特效等。

 

一、网络游戏策划设计分为执行策划和主策划,网络游戏美工设计分为原画设计、游戏UI设计、游游戏动画设计,网络游戏程序设计分为游戏程序设计。

1、网络游戏策划设计师需要学习:数字游戏宏观环境解析、数字游戏高级策划理论、数字游戏创意实践Unity3D项目开发。

2、网络游戏原画设计需要学习:手绘基础、原画艺术基础、动物角色设定、场景设定。

3、网络游戏UI设计需要学习:UED概述、GUI设计基础、网页UI设计、软件UI设计、游戏UI设计。

4、网络游戏程序设计需要学习:游戏程序设计、算法与数据结构、Win32程序设计、游戏数学和智能应用、2D游戏技术与应用。

游戏开发工程师掌握内容:

1、了解并致力于游戏总体设计。

2、配合主程序完成游戏架构及各大功能的设计、开发、调试和其他技术支持。

3、负责游戏开发工具和运营维护工具的设计与开发。

4、完成游戏服务器端模块代码及相关文档的书写、优化对已完成代码进行单元测试。

5、管理维护游戏平台的制作与运行。

6、与团队其他人员配合,促进游戏的改进创新。

负责客户端架构设计、模块划分、编辑器规划、引擎维护与人员分工。负责游戏客户端与公司技术平台的整合。协调与服务器端、策划、美术和公司其他技术部门之间的关系。

 

看一下游戏开发的基本功有哪些:

数学基础:根据你所做内容来决定,一般上层逻辑比较少的去考虑到积分等高数内容。但是如果想搞图形学,矩阵线性代数,高数必须要有一定的功底

算法:常见的排序,查找需要理解并掌握,进一步常见的还有分治,贪心,动态规划,有时候现学现卖也是可以的。另外,除了这些基本的算法,在游戏领域还是有很多其他领域不太常用的算法,比如八叉树查找,碰撞检测,A*。还有一些很特殊的情况需要开发者自己去寻找合适的算法。

C++(C#):基本语法,模板,代理,命名空间,const,继承,内存结构,虚表,引用,断言,宏定义等

数据结构:首先是掌握链表,数组,队列,堆,栈,图,树等数据结构,然后是各种排序,查找,遍历等算法。这些掌握了以后可以很快的熟悉stl或者类似的基本库原,用的时候可以更准确的选择合适的数据结构

设计模式:一般来说,我们需要设计模式来快速的搭建游戏逻辑框架,比如前面提到的各种逻辑系统。而且还需要通过设计模式来理解引擎各个模块的设计思路。

对引擎各个模块有一定深入的理解:这个不用多说,看一遍游戏引擎架构吧,不理解写出的代码经常会出现各种问题(比如同步问题),编辑器各种功能也用不好。

内存管理:可能很多引擎或者语言已经尽可能的帮你处理内存了,但是你难免需要在一些特殊情况下自己处理,内存池技术,各种C++的new的使用,不得不会。

对开发工具的熟悉:这里并不是指只是对某一个引擎使用熟练,而且对不同引擎相关的内容都有一定理解,可以很快的触类旁通。

编译原理,链接,第三方库:经常会遇到各种链接错误,编译错误,打包错误,这需要有一定的相关知识与经验去解决这些问题。

性能分析与性能优化: 主要就是三个方面——内存,CPU,GPU。着手点有渲染批次,渲染实例化,布料优化,网络同步数据量,物理开销等,加载资源优化(包的合并),裁剪,声音文件加载,LOD,美术资源制作规范化等。调试的时候可以使用引擎内置工具,进一步的细节可以采用Intel的VTune工具

对游戏的理解:虽然不玩游戏也一样能参与游戏开发,但玩过游戏的人还是有优势的。最明显的是玩过游戏的人会对游戏有更多的想法与意见,也习惯去主动学习其他的游戏的技术与优点。(程序这样,策划更是如此)

开发经验:这个就比较宽泛了,难以只言片语说清。

经常听别人说游戏开发很复杂:

 

总结来说就是内容太杂,细分又太深。随便举两个技术方向(渲染,AI)就够你无限深入了。还有一些模块,说难不算太难,但是内容相当复杂,需求变更频繁,处理不好就如无底洞一般~

那么我们简单的对游戏模块做一个总结:

游戏逻辑模块系统:游戏玩法核心,包括各种武器,状态,技能,背包,战斗等逻辑系统

动画模块系统:状态机,Montage,动画融合,IK等

物理模块:给需要交互表现的对象赋予物理特性(包括刚体,流体,粒子,布料等),调整重力大小等各种参数,调整交互中力的大小,调整物理约束

AI模块: AI导航,与玩家交互等,玩家的很多功能系统也需要给AI来使用,更深层次的可以考虑将机器学习相关的内容融入

UI模块:搭建各种界面框架(背包,捏脸,地图等),非常耗时间与精力,后期需要不断调整

渲染模块:客户端表现核心,不用多说,内容非常多且深

网络模块:底层架构,同步,网络连接

场景模块:包括地形,关卡,植被,角色管理与优化等

输入与输入处理模块:将玩家输入处理转换成逻辑,需要注意的有组合键,输入法切换等

游戏登录与更新:一般这是专门的工具组来做,比如我们常见的各种游戏登录器,在线更新等。

这里面的除了网络基本上都需要美术,策划,程序共同参与

 

游戏开发仅仅是写逻辑代码么?

当然,不是~~~ 游戏也是一个软件项目,是一个需求变化极为频繁的项目。当你跳出底层的逻辑程序员时,你会发现你还有好多事情要去做。

比如:

版本控制:一般使用git或者svn

存储与序列化(如protobuf):单机玩家的游戏存档需要通过序列化。游戏中的同步系统也需要通过序列化 对象来搭建

反外挂:保证游戏公平性,一般服务器上做各种校验措施,这个东西真的不容易,而且又麻烦,身边懂得人真的不多

多线程优化:一般用于渲染,物理,网络同步等,减少开销,增加cpu利用率

数据库:什么数据要存在数据库里面,什么存在本地就可以。应该选择什么数据库?之后会不会出现游戏合服数据库合并?合并的Key怎么处理?

CDN /服务器的部署与运行等:这个也很复杂,又要考虑成本又想容纳更多玩家(网游),有时可能需要用到CDN技术来优化网络同步,另外还要考虑成本等问题来决定租用云服务器还是物理高性能服务器

实现网络穿透 :对于玩家自己开房间类的游戏,需要我们提供网络穿透的手段,才能让两个内网的玩家链接并通信。有的时候,网络穿透技术平台会提供,不需要自己造轮子。

使用性能分析工具:前面提到了性能优化,优化前我们需要各种工具来辅助我们找到影响游戏效率的瓶颈(如VTune)

 

配置:需要大量策划配置的数据存放在哪里?配置文件?XML?这需要构建一套小的系统(或者引擎提供)

声音数据处理:一般引擎提供基本的音乐与音效处理,但是有的引擎对音频方面处理的更深入,效果更好

平台对接:游戏需要发布到不同的平台,这个平台不仅仅指硬件平台(Android,iOS,PS4,PC,XBOX)还包括各种软件平台(各种应用商店,如PC上的Steam,WeGame。安卓上的应用宝,各种软件管家等)该过程其实也相当繁琐,有一些平台的审核非常严格,需要积累一定的经验才能快速的处理相关内容

国际化与本地化:简单来说,就是不同国家的语言版本不同。如果你的游戏不是只卖给英国美国,你就不得不面对本地化,坑很多

日志系统:开发与运营 游戏上线一定很多bug,你又没办法去玩家电脑上调试,如何快速定位bug,日志系统很有效

调试与维护:开发期 断点调试(最有效)、日志调试、dump调试 、控制台调试,可视化调试(在场景内绘制特定的几何体),截图录屏调试(一般用于调试渲染,动画等)

上线期 日志调试、服务器可以用dump调试,也可以想办法把客户端的dump传送到服务器(做一个内置的自动收集客户端dump程序) 、管理员GM调试(非常重要,可以避免重启服务器)

bug处理:严重损失的bug 有时候已经发生的造成玩家严重损失的bug(如玩家投入大量时间、金钱获取的)无法改变,又不能及时修复,想要弥补玩家,可以通过GM来给予玩家补偿。

游戏崩溃性bug 需要在游戏上线的前两天,把发生概率高的所有Bug通过Dump调试后尽快修复并更新

脚本:简单逻辑代码,热更新

打包流水线,包的大小优化,包的多层递归引用优化等:整个项目从编译到配置再到打包需要哪些处理,要注意哪些配置等

工具开发:针对特殊需求开发特定的工具来提高程序、美术、策划的开发效率

当然,上面的内容还远不足以覆盖游戏开发的所有内容

而且学习任何东西都需要一个过程,我们不需要一开始就掌握这么多东西。日积月累下都有可能成为一名优秀的游戏开发者

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/514073.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

起重机安装拆除安全技术规范

为贯彻安全第一、预防为主、综合治理的方针,确保塔式起重机在安装、使用、拆卸时的安全,制定本规程。 本规程适用于房屋建筑工程、市政工程所用塔式起重机的安装、使用和拆卸。 本规程规定了塔式起重机的安装、使用和拆卸的基本技术要求。当本规程与国…

一些注意事项

1:Collection 子接口 1:List 鉴于 Java 中数组用来存储数据的局限性,我们通常使用 java.util.List 替代数组 List 集合类中元素有序、且可重复,集合中的每个元素都有其对应的顺序索引 1.1 List 接口主要实现类:Arra…

历经3个月,二战华为成功上岸,要个27k应该不过分吧~

先说下我基本情况,本科不是计算机专业,现在是学通信,然后做图像处理,可能面试官看我不是科班出身没有问太多计算机相关的问题,因为第一次找工作,华为的游戏专场又是最早开始的,就投递了&#xf…

嵌入式五大通信协议详解 (一) UART

嵌入式C语言学习进阶系列文章 GUN C编译器拓展语法学习笔记(一)GNU C特殊语法部分详解 GUN C编译器拓展语法学习笔记(二)属性声明 GUN C编译器拓展语法学习笔记(三)内联函数、内建函数与可变参数宏 数组存储与指针学习笔记(一)数…

Spring MVC 和 WebFlux 上传文件

WebFlux 上传文件 1. 表单上传方式1.1 Spring MVC1.2 Spring WebFlux 2. 二进制流2.1 Spring MVC2.2 Spring WebFlux 开发环境:jdk 11 WebFlux:jdk 8 1. 表单上传方式 1.1 Spring MVC multipart大小限制 spring:servlet:multipart:max-file-size: 512…

IS220PPRFH1B输电线路的先导继电器保护

​ IS220PPRFH1B输电线路的先导继电器保护 导引线差动继电器是专为保护配电线路和输电线路而设计的高速继电器,主要用于40公里以内的短线路。它是开关设备继电器中速度最快的功率继电器,该方案的工作需要通信通道,以便它可以将系统电压和电流…

2023.05.11-使用纯CPU来运行RWKV大语言模型

1. 简介 使用CPU来运行C版本的RWKV rwkv.cpp 可以将 RWKV 原始模型的参数转化为 float16,并量化到 int4,可以在 CPU 上更快地运行,也可以节省更多的内存。 2. 下载项目 ## git clone --recursive https://github.com/saharNooby/rwkv.cpp…

PostgreSQL11 | 视图

上一篇讲了索引,索引提高了表查询的速度,这一篇讲视图。 视图 视图,数据库中的一个虚拟表。 目录 视图 视图概述 前期准备 创建视图 单表视图 多表视图 查询视图 删除视图 视图概述 视图同真实表一样具有表的功能,但是…

spring事务失效的12种场景

前言 对于从事java开发工作的同学来说,spring的事务肯定再熟悉不过了。 在某些业务场景下,如果一个请求中,需要同时写入多张表的数据。为了保证操作的原子性(要么同时成功,要么同时失败),避免…

H. Binary Craziness

题目链接 2023 Hubei Provincial Collegiate Programming Contest Examples input 6 6 1 3 2 3 1 4 2 5 3 6 4 6 output 30 input 6 4 1 2 3 5 2 4 3 6 output 0 题目大意: 给出结点个数 n n n和边的个数 m m m 下面依此给出 m m m个边,边是无向的&am…

Linux三种网络模式 | 仅主机、桥接、NAT

💗wei_shuo的个人主页 💫wei_shuo的学习社区 🌐Hello World ! Linux三种网络模式 仅主机模式:虚拟机只能访问物理机,不能上网 桥接模式:虚拟机和物理机连接同一网络,虚拟机和物理机…

字典核心底层原理

字典对象的核心是散列表。散列表是一个稀疏数组(总是有空白元素的数组),数组的每个单元叫做bucket。每个bucket有两部分:一个是键对象的引用,一个是值对象的引用。 由于,所有bucket结构和大小一致&#xf…

服装厂的管理系统如何选?内行人:这4点一定要注意!

服装厂管理水平偏低,耗费大量时间和资金成本,导致利润越来越低,是现在很多中小服装厂普遍面临的痛点。 依靠传统的管理模式,口头询问生产进度,手写统计数量,很显然不适合现代工厂的管理模式,服装…

java开发记录V1

编辑器vscode 在vscode中安装配置springboot 下载安装jdk oracle jdk BellSoft Liberica JDK version 17 在vscode编辑器中安装相关组件Extension Pack for Java、Spring Boot Extension Pack、Spring Initializr Java Support 创建springboot项目:ctrlshiftp后…

【Midjourney】Midjourney 辅助工具 ① ( 自定义命令工具 | 设置描述词 | 设置风格 | 设置灯光 | 设置相机 | 设置艺术家 )

文章目录 一、Midjourney Prompt Tool 自定义命令工具1、设置描述词2、设置风格3、设置灯光4、设置相机参数5、设置艺术家参数 Midjourney 提示词命令 可以使用 辅助工具 进行生成 , 辅助工具如下 : Midjourney Prompt Tool 自定义命令工具Midjourney Prompt Generator 命令生…

软件测试踏入这三个误区,就离滚蛋不远了

误区一:测试都是女生,男生不适合 误区二:这个职位很简单,不需要很多技术含量,每天很闲 误区三:起步即巅峰,薪资提升空间不大,一线才八九千 如果你听到这样的言论,赶紧走…

AssetBundle加载与卸载时的内存变化

AssetBundle.LoadFromFile加载一个80MB的assetbundle会分配1MB左右的pss内存 adb分析:private-otherUnityProfiler分析:有3块 1.Other/AssetBundle/LoadingCache 2.Other/SerializedFile/archive:/CAB-e42axxxxxxx 3.NotSaved/AssetBundle/xxxxxx.ab …

陷入“产品纠结”的王振滔,与学不来波司登的奥康

文|螳螂观察 作者| 青月 曾经的一代“鞋王”奥康,正在走下神坛。 4月底,奥康国际披露了2022年的年报,数据显示,公司归母净利润亏损3.7亿元,同比下滑1185.93%。此外,公司年报还被出具了保留意见的审计报告…

Revit创建装饰纹路柱及CAD生成柱

一、Revit中如何创建装饰纹路的柱子 在罗马柱的外观中,很少存在圆滑的柱身,在Revit中,可以用阵列的方式,更快的装饰柱子。 在族样板中,采用拉伸的方式先创建一个柱子 采用空心拉伸为柱子绘制花纹 选择圆形工具绘制&…

C语言的数据类型

数据类型 变量和常量 常量的2种定义方式: 1、关键字const const 数据类型 常量名 值; 如:const float pi 3.14159; 2、宏定义 #define 常量名 值 PS: 这里没有"“和”;" 如:#define PI 3.14159 推荐用宏定义的方式定义常量。 整…