想做游戏开发,我应该会点啥?

news2024/11/16 5:23:48

在知乎上,经常能看到类似“如何入门游戏开发”这样的问题,这篇文章,我试着概括性的对游戏开发所需要的技能做一个总结,希望大家对游戏开发能有一个基本的认识~

游戏开发基础要求高么?

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

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

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

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

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

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

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

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

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

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

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

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

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

开发经验:这个就比较宽泛了,难以只言片语说清。比如你的游戏莫名其妙的出现了一些bug,新手完全无从下手,而有经验的人会有各种手段去调试并解决。经验丰富的老手有时真的抵得上N个新手的,所以这需要各位不断的学习与实践了。

经常听别人说游戏开发很复杂,复杂在哪呢?

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

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

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

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

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

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

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

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

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

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

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

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

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

C++游戏后端开发视频教程

Linux C/C++开发(后端/音视频/游戏/嵌入式/高性能网络/存储/基础架构/安全)icon-default.png?t=N7T8https://link.zhihu.com/?target=https%3A//ke.qq.com/course/417774%3FflowToken%3D1013300

需要C/C++ Linux服务器架构师学习资料加qun812855908获取(资料包括C/C++,Linux,golang技术,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK,ffmpeg等),免费分享

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

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

比如:

版本控制:一般使用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/1315264.html

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

相关文章

[MySQL]数据库概述

目录 1.什么是数据库 2.数据库分类 2.1关系型数据库 2.2非关系型数据库 1.什么是数据库 我们知道,存储数据可以使用文件来存储。那么为什么我们还要大费周章的去设计和使用数据库呢? 因为文件保存数据有以下几个缺点: 1.文件的安全性不…

Failed to install one or more provisioning profiles on the device

把provision文件导入mac,双击安装provision的时候,提示:Failed to install one or more provisioning profiles on the device。 大体意思是: 未能在设备上安装一个或多个配置配置文件。请确保为此设备配置配置文件。如果没有&am…

FGSM、PGD、BIM对抗攻击算法实现

本篇文章是博主在AI、无人机、强化学习等领域学习时,用于个人学习、研究或者欣赏使用,并基于博主对人工智能等领域的一些理解而记录的学习摘录和笔记,若有不当和侵权之处,指出后将会立即改正,还望谅解。文章分类在AI学…

代码随想录算法训练营 | day52 动态规划 300.最长递增子序列,674.最长连续递增子序列,718.最长重复子数组

刷题 300.最长递增子序列 题目链接 | 文章讲解 | 视频讲解 题目:给你一个整数数组 nums ,找到其中最长严格递增子序列的长度。 子序列是由数组派生而来的序列,删除(或不删除)数组中的元素而不改变其余元素的顺序。…

vue脚手架安装及使用

准备工作 安装node安装cnpm cnpm是npm的“廉价平替” 提高安装速度 npm install -g cnpm --registryhttps://registry.npm.taobao.org 安装脚手架 安装Vue脚手架 cnpm install -g vue/cli 用vue脚手架创建vue项目 找好创建项目的位置 创建项目 vue create test (test为项…

磁盘及文件系统(上)

这次博客我们将重点理解Ext2文件系统。 首先我们要理解什么是文件系统。 在之前我们一直理解的文件都是一个被打开的文件,而os为了能够管理这样的文件创建了struct_file这样的结构体对象在内核中描述被打开的文件,这个结构体对象中包含了被打开文件的基…

【PostgreSQL】从零开始:(一)初识PostgreSQL

从零开始:(一)初识PostgreSQL PostgreSQL数据库介绍为什么使用 PostgreSQL?那么多最终用户,云厂商为什么要贡献核心代码?基于PostgreSQL底层开发的好处:为什么要学习PostgreSQL?截止本文发布之日&#xff0…

鸿蒙系统(HarmonyOS)之方舟框架(ArkUI)介绍

鸿蒙开发官网:HarmonyOS应用开发官网 - 华为HarmonyOS打造全场景新服务 方舟开发框架(简称:ArkUI),是一套构建HarmonyOS应用界面的UI开发框架,它提供了极简的UI语法与包括UI组件、动画机制、事件交互等在内…

鸿蒙app获取文本控件按钮控件_修改控件名称_按钮触发事件_提示信息显示

鸿蒙app获取文本控件按钮控件_修改控件名称_按钮触发事件_ 点击启动:提示信息显示 package com.example.myapplication.slice;import com.example.myapplication.ResourceTable; import ohos.aafwk.ability.AbilitySlice; import ohos.aafwk.content.Intent; impor…

linux 文本信息查询grep;控制命令执行和管道操作符号

1、grep grep "keyword" /path/to/logfile获取查询结果最后一行 grep "runs/detect/train" test4.log | tail -n 12、linux控制命令执行和管道操作符号 &、|、; 和 &&、》、>、< ##例子&#xff1b;wandb disabled && yolo …

synchronized关键字的使用和原理

synchronized关键字的使用和原理 synchronized&#xff1a;对象锁&#xff0c;保证了临界区内代码的原子性&#xff0c;采用互斥的方式让同一时刻至多只有一个线程能持有对象锁&#xff0c;其它线程获取这个对象锁时会阻塞&#xff0c;保证拥有锁的线程可以安全的执行临界区内…

vue-实现高德地图-省级行政区地块显示+悬浮显示+标签显示

<template><div><div id"container" /><div click"showFn">显示</div><div click"removeFn">移除</div></div> </template><script> import AMapLoader from amap/amap-jsapi-load…

SpringBoot - application.yml 多环境切换解决方案

问题描述 这个问题玩过 SpringCloud 的小伙伴估计会想到用 bootstrap.yml 来解决这个问题。但是如果说为了解决这个问题引入了一堆的 SpringCloud Jar&#xff0c;就感觉杀鸡用牛刀。 于是今天我们想只有 application.yml 自己就可以解决这个问题&#xff0c;如何搞定&#x…

真正可行的vue3迁移到nuxt3方法(本人亲测,完全避坑)

终于到了总结经验的时候了&#xff0c;这绝对是全网唯一、完全真正可行的干货。 在我看来&#xff0c;知识就是要拿来分享的&#xff0c;分享给他人也是在提高自己。我绝对不会搞什么订阅或者vip专栏来搞钱坑害各位&#xff0c; 因为我在csdn写文章最主要的目的是为了记录和总…

Chrome限制第三方Cookie:未来无法再追踪你看过哪些敏感的“色色”内容了

当我们在浏览网络的时候&#xff0c;常听到「Cookie」这个词&#xff0c;但许多人可能不太清楚它到底是什么。最近&#xff0c;Google 宣布了一项重要更新&#xff0c;Google Chrome 将减少对第三方cookie 的支持&#xff0c;以提高用户隐私保护。 下面我会解释一下这个改变对…

华为数通——路由冗余和备份

注&#xff1a;当一条路由的出接口down时&#xff0c;该路由会自动失效。 要求&#xff1a;数据优先走千兆链路。 R1 [ ]ip route-static 172.16.1.0 24 12.1.1.2 目的地址 掩码 下一条 [ ]ip route-static 172.16.1.0 24 21.1.1.2 preference 50 目的地址 …

ETLCloud的应用策略——实时数据处理是关键

一、ETLCloud是什么&#xff1f; ETLCloud又称数据集成&#xff08;DataOps&#xff09;&#xff0c;是RestCloud旗下的一款数据仓库管理工具&#xff0c;通过自动化数据转换和集成来实现企业内部和外部数据的无缝对接&#xff0c;从而帮助企业快速获取准确的数据信息&#xff…

vue3+leaflet天地图开发

<script setup> import { onMounted, onUnmounted, ref } from "vue"; // todo 项目使用请放开 leaflet 引入 // import L from leaflet;const emit defineEmits(["mapLoad"]);var markers ref([]); const mapRef ref(); const marker ref(); co…

Spring对JUnit4和junit5的支持

Junit4支持 第一步&#xff1a;准备工作&#xff1a; 引入JUnit4的依赖&#xff0c;Spring对JUnit支持的依赖还是&#xff1a;spring-test&#xff0c;如下&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://ma…

Cadence SPB17.4 -Allegro - 做Logo封装及添加中文丝印

Cadence SPB17.4 -Allegro - 做Logo封装及添加中文丝印 Chapter1 Cadence SPB17.4 -Allegro - 做Logo封装Chapter2 Allegro添加中文字体的简单有效方法Chapter3 Allegro添加Logo方法方法一方法二 链接&#xff1a;https://pan.baidu.com/s/1eUgUOjOfNam3rqZyQOov_g 提取码&…