摘要: 一位程序员网友小保哥分享自己的UE4快速上手过程,只是笔记,52VR做了一点更加适合阅读的修改,整理给大家。
  1. 首先,本文只是针对有比较熟练C++技能的程序员,他可以没有任何图形学或游戏引擎方面的经验知识。
  2. 其次,本文只是偏重工程方面的介绍,没多少理论知识的介绍,目的纯粹就是让一个完全没有接触过UE4的C++程序员能够很快着手开发UE程序。
  3. 再次,本文只是个人的经验之谈,甚至有可能有理解错误的地方,因为我也只是学了UE4一个多月,但是确实能够让我很短时间就能从事UE4的开发了。
  4. 最后,源于以上几点,高手勿喷,如有不爽,绕行即可。若有闲情雅致,可以顺手指点指点,不吝感激。

我研究的是UE4.10,因为电脑上只下载了这个,看的官方文档是4.9的。

以下就按时间顺序排列我的学习过程:

1)创建工程

对程序员来说,甭管这个引擎如何如何,我如果用它开发一个什么东西,首先得创建一个工程,然后把所有相关的代码都写到这个工程里。这就是我们要知道的第一步。那么在UE4里如何创建一个工程呢?在启动引擎程序时,自己会蹦出一个窗口,让你选择打开电脑上已有的工程或者创建新的工程。UE4工程只有两种类型:蓝图的、C++的。这两种类型的工程其实没有任何实质性的区别。把UE4工程分成这两种类型,表现出来的唯一区别是:C++类型的工程创建的时候,会自动弹出visual studio来打开这个UE4工程。仅此而已。

而对程序员来说,蓝图类型的工程创建好后,在该工程的UEditor的File菜单里会有一项[Create Visual studio Project],中文版是[生成Visual Studio项目],以后我只针对英文版来写了。点击一下这个菜单项,对应的Visual Studio工程文件就创建好了。相应的,File菜单里还有[Open Visual Studio]菜单项,作用就是在Visual Studio里打开该工程对应的代码文件。其他菜单项暂且放下,一会儿再回头说几句就懂了。

2)UE4的工程配置

甭管是蓝图类型还是C++类型的,工程反正是创建好了。

到这里,我们先不管如何往这个工程里写代码添加新功能。我们直接Build一下这个工程:UEditor界面工具栏上的Build按钮或者VisualStudio的Build按钮。没有任何悬念,结果肯定是Build成功。

哦,说到这里,提一下,UE4.10以上必须安装Visual Studio 2015。我们打开对应的Visual Studio工程(如果是蓝图类型,按照上面所述方法生成Visual Studio工程即可)。

在VisualStudio里,我们能看到这个工程里的代码文件就很少的几个,如图,这张图片里VirtualCamera是我的工程名。注意看.Target.cs后缀的文件,这里所谓的Target就是Makefile文件里的Target的意思。我们知道手写Makefile文件在某些情况下是比较费劲的行为,因此程序员们造出了很多Automake工具用来自动生成Makefile文件。因此,UE4自己也造了一个Automake工具,用来生成Makefile文件。这个Automake工具是C#写的,用C#文件来描述Make的规则,比如这个Target.cs就是用来描述Makefile里最终的成品,可以有多个Target.cs,但它们不一定同时起作用。比如vs编译类型选为[Development]而不是[Development Editor]时,那个Editor.Target.cs文件描述的Target的Make规则就不会起作用,此时,即便你从硬盘上和vs里删掉这个.Editor.Target.cs文件,工程也能成功编译并运行。文件列表里还有类似.Build.cs文件,这个就描述类似Makefile里的中间目标文件的Make规则。这些cs文件是在添加蓝图类或者c++代码时自动生成的,不用鸟它们,只需要知道这些cs文件是UE4的Automake工具需要的就行了,只要有了这些cs文件,我们的UE4工程就能正确编译运行。我这句话里蕴含的意思还有:对于UE4工程的编译,完全不依赖visual studio的project文件,即.vcxproj等文件。也就是说UE4使用自己的AutomationTool来读取cs文件描述的Make规则来进行编译。然而,凡是用visual studio打开的工程,必然需要一个.vcxproj文件,结合刚才讲的,我们就能明确这里visual studio的作用仅仅是方便我们阅读和编写源代码,这里visual studio的方便性还是很巨大的,不是吗!因为vs为阅读编写源代码提供了强大的支持。上一节的最后我没讲UEditor的File菜单里还有一项[Refresh Visual Studio Project],这个选项的作用就是遍历我们的UE4工程目录结构,根据遍历的结果,刷新.vcxproj文件,然后让vs重新加载这个更新的proj文件,这样只要我们往工程目录里增加或删除了代码文件,只需点击一下这个菜单项,在vs里就能反映出这种变化。

3) UnrealAutomationTool

工程的Build是一个很长的过程,里面分成多个阶段,我只关心里面最重要的阶段,就是代码文件的Compile过程。这里先介绍几个名词:UBT(Unreal Build Tool)又叫UnrealAutomationTool,这个工具主要作用就是组织Build流程,直白点说就是按一定顺序调用不同的工具完成整个Build过程。首先调用的肯定是解析各个cs文件的工具,解析的结果就是Build的目标,先Build谁,再Build谁。Build的顺序和目标定下来之后,就要开始真正的Build动作了,也就是Compile代码文件,Link出目标。Compile的第一步是调用UHT(UnrealHeaderTool)工具,这个工具就类似于C++里的预处理器,UHT读取.h文件,解析里面的一些元信息(UE4定义的,比如[UCLASS],[USTRUCT][BlueprintCallable],UPROPERTY,UFUNCTION等等),这些元信息不是C++语言的一部分,C++编译器自然无法识别,所以需要UHT工具先解析这些元信息,生成对应的.generated.h文件,在这个.generated.h文件里的内容就是用合法C++代码模拟的刚才那些元信息。然后原先.h文件里的所有元信息文本都会被删除。这一步完成后,出来的就都是合法的C++的代码文件了,可以直接送给C++预处理器处理,进而编译器,链接器。最终产出Build的目标,完成Build过程。参考一下下图:

(点击图片看大图)

4)还是要说说Blueprint

到这里,对于C++程序员来说,算是掌握了总体的开发流程,知道如何开始,如何结束了。

那么剩下的就是学习如何往工程里添加代码,并学习代码怎么写--学习有哪些api可以用,如何用。这是UE4开发里最重要的一块了,废话,前面说的都只能算是常识,不能算UE4开发。然而只有知道了这些常识之后,我们接下来才可以真正开始学习开发。

首先开宗明义,学习UE4最快速的捷径就是Blueprint,这是我学了1个多月的UE4的最大感触。

在UE4的官方文档里,讲Blueprint时首先就说到:在UE4里,Blueprint支持的功能涵盖了C++支持的几乎所有特性,即BP(Blueprint简写)几乎等价于C++。然而,话锋一转,其又说到,BP有其适用场合,不是所有场合都适合用BP,因为某些场合BP的性能比原生C++代码要慢。

适合用BP的场合:主要就是对性能要求不是特别高的应用场景,比如绝大部分Event的响应等等。然而在我看来,大部分的开发任务不就是Event的响应么,这也就是说BP适用UE4开发的绝大部分场景。而且,众人所说BP太慢,纯粹是无理由的偏见,我承认某些BP可能没有原生手写C++代码快,但并不代表BP性能低。

从开发效率上来看,能用BP的地方尽量用BP所带来的好处实在是不用多说了。尤其对新手来讲,写C++代码都不知道有哪些东西可以调用,更别谈写高效的C++代码了。因此,对新手来说,学习BP是必须的。其最重要的作用,就是让UE4新手能快速的掌握引擎在代码层面提供的功能。

然而,在认识到这一点之后,我并没有立即开始BP的学习,而是先学习了一下如何让C++代码与BP交互,具体的知识少不了要自己去看官方文档,我这里只是列出我的经验。

还要提一下:凡是能放到unreal场景里的东西都是Actor对象,对应C++里的AActor类型。Actor只是一个壳,它提供的所有功能都是由它包含的Component来提供的,不同的Component能提供不同的功能,最后表现出来的就是Actor具有所有这些Component提供的功能。Component的总分类,见链接,这个和Unity中的组件有些类似。我能保证这里的文档真正看懂的话,C++编程的部分从动手方面来讲不存在任何问题了。接下来看BP文档那一章,掌握BP也没有任何悬念,而且是很快乐的过程,不会有任何难度。

#5)GamePlay

关于游戏模式,这里的文档也需要在看BP前提前阅读一遍 :

这里也有一张脑图,大家看看:

(点击图片看大图)

C++程序员如何入门Unreal Engine 4相关推荐

  1. 网络游戏程序员新手入门 [转]

    网络游戏程序员新手入门 [转] 原文地址: http://job.17173.com/content/2008-12-15/20081215172107441,1.shtml 游戏开发流程和部分分工 ...

  2. 【佛系养身】男程序员护肤入门

    [佛系养身]男程序员护肤入门 水.乳.霜.精华的区别和步骤 隔离和防晒的区别 隔离霜的作用 防晒霜的作用 推荐使用方式 关于价格和产品 先水后乳 文章参考价值 参考 冬天干的不行,准备整一套护肤的涂一 ...

  3. python代码少的作品_原创 8行python代码展示程序员从入门到大神(或跑路)的全部状态...

    一行python代码可以做什么? 人生苦短,我用python.python的世界里无处不在的简洁和短小,往往一行代码可以实现很多有意思功能. 你敢想象你从入门python代码.网络达人.反重力怪才.爱 ...

  4. 8行python代码展示程序员从入门到大神(或跑路)的全部状态

    一行python代码可以做什么? 人生苦短,我用python.python的世界里无处不在的简洁和短小,往往一行代码可以实现很多有意思功能. 你敢想象你从入门python代码.网络达人.反重力怪才.爱 ...

  5. sql数据黑马程序员——SQL入门

    最近研究sql数据,稍微总结一下,以后继续补充: ---------------------- ASP.Net+Android+IO开辟S..Net培训.等待与您交流! --------------- ...

  6. java写一个外网访问的接口_Java程序员如何入门?教你写第一个程序

    大家都知道,Java是一门面向对象的编程语言,不仅吸收了C++的各种优点,还摒弃了C++里难以理解的多继承.指针等概念,因此Java语言具有功能强大.简单易用. 另外,Java允许程序员以优雅的思维方 ...

  7. @程序员,入门爬虫看这一篇就够了!

    最近,笔者在经常后台看到小伙伴留言在问,想学Python,但不知道如何入门? 其实对于这个问题,真是仁者见仁智者见智.有句老话说的好"一千个读者,就有一千个哈姆雷特"不过对于此疑惑 ...

  8. Web程序员如何入门以太坊开发

    我经常构建使用以太坊的Web应用程序,我理所当然地认为每天都使用的是神奇的工具集.我们的生态系统正在迅速发展,我认为很多新人都感到不知所措.以太坊是一项了不起的技术,但它也是新生的,而且根本没有足够的 ...

  9. [学习笔记]黑马程序员-Hadoop入门视频教程

    文章目录 参考资料 第一章:大数据导论与Linux基础(p1-p17) 1.1 大数据导论 1.1.1 企业数据分析方向 1.1.2 数据分析基本流程步骤 明确分析的目的和思路 数据收集 数据处理 数 ...

最新文章

  1. C# 可以利用反射给只读属性赋值吗?
  2. python工作-Python自动化运维|Python语言工作岗位待遇如何?
  3. jenkins报错Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password) 的处理
  4. scrolling=no 无法根据坐标获取元素_科曼尼KOMANIE三坐标测量仪命令不执行【维修】北京303所...
  5. 封装Apache http client工具类
  6. vue调用日期_Vue 前端开发——打印功能实现
  7. 什么是信息化?什么是数字化?这两者有什么联系和区别?
  8. 双浮点运算计算机在线,双浮点运算计算器
  9. 被syn攻击了怎么办,如何预防服务器被被syn攻击
  10. 洪水填充算法_计算机图形:洪水填充算法
  11. 用计算机MR,常用计算器上的M+,M-,MC,MR都是什么意思,该怎么用?
  12. 金融中需要的计算机知识,金融笔试中的综合知识一般会考什么?
  13. android 自定义属性
  14. 从球场捡拾矿泉水瓶的老人,看市场经济下的供求关系
  15. 面试时如何回答面试官的问题
  16. php请求纯文本,php – 使用纯文本回退发送HTML简报
  17. 关于Topic设计的思考
  18. MySql的初识感悟,以及sql语句中的DDL和DML和DQL的基本语法
  19. 青岛市新型智慧城市建设成效
  20. Spring + Thymeleaf 方言

热门文章

  1. Maven出现错误No plugin found for prefix ‘jetty‘ in the current project and in the plugin groups的问题解决
  2. Mapped Statements collection does not contain value for 之运行异常原因
  3. 纯前端下载pdf链接文件,而不是打开预览的解决方案
  4. js async await 终极异步解决方案
  5. 你怎么得到git总是从特定的分支拉?
  6. 功能之前,感叹号有什么作用?
  7. 《2018-2019全球IPv6支持度白皮书》发布,江北新区IPv6示范区建设正式启动
  8. spring--源码分析
  9. linux系统运行状态检查
  10. ExtJS中xtype 概览