Unreal4(虚幻4抽茧剥丝)——03章从生成代码入手

本章开始我们进入Unreal4正统的学习阶段

首先我们打开Unreal系统工程

运行Unreal4,新建工程

选择TP_FirstPerson
C++版本(笔者的向导提示FirstPerson已经存在,因为工程已经预先创建了,请读者忽略),点击创建项目,工程向导将为您自动创建一个第一人称射击游戏的架子。并询问是否打开C++工程,在这里我们选是即可

工程打开后如图所示,并且对UnrealEngine的源代码工程进行了关联。

Engine目录关联到了所下载的引擎源代码,至于Programs中的一些项目容后用到时再细说,这里打开FirstPerson这个项目目录,这里就是我们向导模板为我们生成的工程所需的代码文件了

其中Character对应着游戏中的角色,是游戏物理表现的抽象,GameMode继承自Unreal的传统是Gameplay的抽象,Hud,是游戏中Hud显示的抽象,Projectile是游戏枪支发射体的抽象!

之所以我们要从这个工程讲起,是因为向导工程生成的代码中,只有这个工程相对丰富一些,具有一定的可讲性,当做入门的例子再好不过了。我们开始我们的抽茧剥丝,首先打开FirstPersonCharacter.h:

首先这个类被各种各样的宏来装饰着,这个是UE4格式化C++实现反射的方式,大概作用是把相应一系列Metadata作为标记插入到二进制类中。在此如果展开讨论这些,很可能读者就会失去兴趣,我相信读者读这系列的目的就是为了尽快上手,能够快速做一些Unity里能做到的事,所以这些繁文细节容后讨论,该类是继承自Character,而Character继承自Pawn,Pawn作为Unreal系列的历史财富是对可控物体的一个很好的抽象并与普通Actor进行区别,而不像Unity所有可视物体都是Gameboject。

GENERATED_UCLASS_BODY()之后定义了该类的成员属性和方法,至于UPROPERTY,UFUNCTION这些宏的细节与本讲无关,本系列不是一个说明手册,而是抽茧剥丝一样,从一团乱麻中找出个线头,然后一点一滴一切自然明朗。所有读者不用心急了解这些。只需要跟着笔者的步骤就够了。.h文件暂时看到这里

我们打开FirstPersonCharacter.cpp文件

首先观察其构造函数

这个构造函数的const 参数PCIP很有意思也很重要:

他的作用是在真实的C++构造函数完成后用来初始化相应属性的一个内部类对象。

用过UE3的同学肯定记得Unreal
Script中有个Properties块,用来初始化各个成员以及Component,进入UE4时代脚本被结构化C++以及BP的合作所替代,所以内部属性初始化直接采用了内部类对象PCIP进行设置

CapsuleComponent为从ACharacter继承的成员(这里提一句:根据Unreal的传统命名规则,所有直接或间接继承自Actor的类都以首字母A开头,所有直接继承自UObject类都以首字母U开头),所有此处只需要调用其初始化接口即可

FirstPersonCameraComponent
是UCameraComponent类型,此处是最简单最暴力的方法,直接通过PCIP创建并以CapsuleComponent为父,Attach到胶囊体上

Mesh1P是本类定义的成员,创建一个只有手和枪的Mesh并Attach到Camera上然后就继续进行一些初始化设置

这里有几个重点:

1 PCIP.CreateDefaultSubobject接口创建组件的方法

2 TSubobjectPtr<class
XXX>的意义是通过内定智能指针创建相应类的对象由Unreal虚拟机统一管理并且进行自动GC

未完待续。。。。。。

时间: 2024-12-20 12:33:05

Unreal4(虚幻4抽茧剥丝)——03章从生成代码入手的相关文章

Unreal4(虚幻4抽茧剥丝)——00章开卷语

大家好,Unreal4自从推出到现在已经2个月有余,本人有幸参加过2个Unreal3项目,Unreal的这次重大升级对于我们这些老用户来说绝对是一场饕餮盛宴,要学的东西很多!很多制作思路都变了!但无奈本人现阶段在一个非Unreal项目中无法自拔.学习进度缓慢.并且由于项目进入关键时期,导致学习时间被冲得七零八落的.笔记也记得东一块,西一块的也没有个合适地方整理,所以在此打算借博客园宝地对自己的学习过程进行一个记录.还有希望能整理一套深入浅出的教程.这样能让有兴趣学习的人有个入门参考.那也为吾之幸

Unreal4(虚幻4抽茧剥丝)——01章初窥Unreal以及准备工作

本章内容有点老生常谈,而且很多以前的朋友,同事写的博文都具有这一章,曾经打算直接略过,但是如果没有这一章内容,本系列将不具备完整性,和可参看性!为了让只看该系列人的人能大致了解UE4的开发方法,所以本系列也加入了这一章节,为了让大家尽快,尽可能给早点接触到实质内容,本章尽量做到言简意赅.尽量把其他博文里几个章节的内容整合成一个,这么做的目的就是为了让大家只需要参看本章一章内容就能快速做好准备工作.开始实际内容的学习.那么好我们开始吧 首先说一句废话:UE4自发布以来,在行业内引起了轩然大波,这不

Abp vNext抽茧剥丝01 使用using临时更改当前租户

在Abp vNext中,如果开启了多租户功能,在业务代码中默认使用当前租户的数据,如果我们需要更改当前租户,可以使用下面的方法 /* 此时当前租户 */ using (CurrentTenant.Change(tenantId)) { /* 此时为租户 tenantId */ } /* 此时为当前租户 */ 那上面这种在using中临时更改租户是怎样实现的呢,通过看源码然后自己整理了一下,简化版如下 /// <summary> /// 当Dispose方法被调用时 这个类可执行一个方法 ///

异步编程系列第03章 自己写异步代码

p { display: block; margin: 3px 0 0 0; } --> 写在前面 在学异步,有位园友推荐了<async in C#5.0>,没找到中文版,恰巧也想提高下英文,用我拙劣的英文翻译一些重要的部分,纯属娱乐,简单分享,保持学习,谨记谦虚. 如果你觉得这件事儿没意义翻译的又差,尽情的踩吧.如果你觉得值得鼓励,感谢留下你的赞,愿爱技术的园友们在今后每一次应该猛烈突破的时候,不选择知难而退.在每一次应该独立思考的时候,不选择随波逐流,应该全力以赴的时候,不选择尽力而

第03章-VTK系统概述(1)

[译者:这个系列教程是以Kitware公司出版的<VTK User's Guide -11th edition>一书作的中文翻译(出版时间2010年,ISBN: 978-1-930934-23-8),由于时间关系,我们不能保证每周都能更新本书内容,但尽量做到一周更新一篇到两篇内容.敬请期待^_^.欢迎转载,另请转载时注明本文出处,谢谢合作!同时,由于译者水平有限,出错之处在所难免,欢迎指出订正!] 本章旨在介绍VTK系统的总体概述,并讲解运用C++.Java.Tcl和Python等语言进行VT

&lt;&lt;Python基础教程&gt;&gt;学习笔记 | 第03章 | 字符串

第03章: 使用字符串 ------ 支持的操作 索引 切片 增加元素 删除元素 更新元素 查找元素(检查某个元素是否是序列中的一员) 序列长度 最大值 最小值 其他内建函数 >>> website='http://www.python.org' >>> website[-3:]='com' #此操作不合法,因为字符串是不变,不能做修改 Traceback (most recent call last): File "<pyshell#162>&q

JavaScript权威指南第03章 类型、值和变量

类型.值和变量 数据类型分类: 原始类型(primitive type):数字 字符串 布尔值 null undefined 对象类型(object type): 对象是属性的集合,每个属性都由"名/值"对构成. javascript解释器有自己的内存管理机制,可以自动对内存进行垃圾回收. 3.1数字 javascript不区分浮点和整型,所有的数字都是按照浮点型处理. 3.1.1整型直接量 3.1.2浮点型直接量 3.1.3算数运算 3.1.4二进制浮点数和四舍五入错误 当进行小数进

JavaScript权威指南第03章 类型、值和变量(2)

题目链接:https://oj.leetcode.com/problems/set-matrix-zeroes/ Given a m x n matrix, if an element is 0, set its entire row and column to 0. Do it in place. 一个个找肯定会超时,我们可以分别用一个行向量和一个列向量进行维护.这样O(m*n) 能出来 class Solution { public: void setZeroes(vector<vector

第03章-VTK系统概述(3)

[译者:这个系列教程是以Kitware公司出版的<VTK User's Guide -11th edition>一书作的中文翻译(出版时间2010年,ISBN: 978-1-930934-23-8),由于时间关系,我们不能保证每周都能更新本书内容,但尽量做到一周更新一篇到两篇内容.敬请期待^_^.欢迎转载,另请转载时注明本文出处,谢谢合作!同时,由于译者水平有限,出错之处在所难免,欢迎指出订正!] [本节对应原书中的第29页至第39页] 3.2创建VTK应用程序 本章内容包括利用Tcl,C++