UE4杂记
一些学习UE4时的笔记,转载请注明出处。
☆ UE4逻辑
Actor 是由 AActor 类派生而来的类实例;能被放入游戏世界场景的所有游戏性对象的基础类。对象是继承自 UObject 类的类实例;虚幻引擎中所有对象的基础类,包括Actor。因此,实际上虚幻引擎中所有的实例均为对象;然而,一般的术语中,Actors通常用于指继承了AActor类的实例,而“对象”指非继承自AActor类的实例。
Pawn 是可以作为世界中的一个“代理”的Actor。Pawn可以由控制器处理,它们可以轻松地接受输入,并且可以执行各种各样的类似于玩家的动作。
Character(角色)是类人的Pawn。
控制器 是负责管理Pawn的Actor。一般有两种控制器:AIController 和PlayerController。
PlayerController(玩家控制器)是Pawn和控制它的人类玩家间的接口。PlayerController本质上代表了人类玩家的意愿。
AIController正如其名,是控制Pawn的一个人工智能控制Pawn的接口。
GameState 包含了游戏状态,这包括像关联玩家的列表、分数、象棋游戏中的象棋位置或者在开放世界游戏中已经完成的任务列表。
PlayerState是游戏中的一个参与者的状态,比如人类玩家或者模拟人类玩家的机器人。
☆ UE4反射
参考:http://www.cnblogs.com/ghl_carmack/p/5677090.html
反射我的理解就是对一些类成员加上一些限制词后,可以在UE4运行的编辑面板上改动参数,并且实时变化。
如:
/* Allows distance-based volume attenuation. */
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = AttenuationDistance, meta = (DisplayName = "Enable Volume Attenuation"))
uint8 bAttenuate : 1;
就是可以在细节面板中看到AttenuationDistance的值并且可以进行修改,鼠标放上去后还会有Enable Volume Attenuation的注释,bAttenuate的初始值为1。
反射系统是可以选择加入的。你需要给暴露给反射系统的类型或属性添加注解,这样Unreal Header Tool (UHT)就会在编译工程的时候利用那些信息生成特定的代码。
#include "FileName.generated.h"
为了标记一个头文件包含反射类型,需要在文件顶部添加一个特殊的include文件。
UCLASS()来表明它是需要反射的类型
GENERATED_USTRUCT_BODY()
该段代码在需要反射的类或者结构体里面是必要的,因为它们会加入额外的函数和typedef到类的内部。
UPROPERTY()中包含了EditAnywhere和Category=Pawn注解。这表示这个属性可以在编辑中的任意细节面板中进行编辑,并且会显示在Pawn分类中。如:
/** How many resources this pawn is worth when it dies. */
UPROPERTY(EditAnywhere, Category=Pawn)
int32 ResourcesToGather;
UFUNCTION()有以BlueprintCallable以及分类作为注解的函数,这表示它们可以在蓝图里面调用到这些C++函数:如:
/** set attachment for weapon slot */
UFUNCTION(BlueprintCallable, Category=Attachment)
void SetWeaponAttachment(class UStrategyAttachment* Weapon);
UStruct是所有 聚合结构体的基础类型(包含其它成员的类型,比如一个C++类、结构体、或者函数),不应该跟C++中的结构体(struct)混为一谈(那是UScriptStruct)。UClass可以包含函数、属性以及它们的孩子,而UFunction和UStriptStruct只能包含属性。
☆ UE4的API前缀规范
派生(继承)自 Actor 的类前缀为 A,比如 AController。
派生自 Object 的类前缀为 U,比如 UComponent。
如:USceneComponent(允许子组件相对于父组件进行位移,旋转,缩放等操作的组件),UStaticMeshComponent(静态网格组件),USphereComponent(球体碰撞组件)
派生自 SWidget(Slate UI)的类前缀为 S,比如 SButton
Enums 的前缀为 E,比如 EFortificationType。
Interface 类的前缀通常为 I,比如 IAbilitySystemInterface。
Template 类的前缀为 T,比如 TArray。
其余类的前缀均为 字母 F ,比如 FVector。
☆ UE4类的继承关系
Object->Actor+Component->Level->World->WorldContext->GameInstance->Engine
☆ 虚幻4纯函数和非纯函数
主要的区别是纯函数不会以任何方式修改状态或者类的成员,纯函数一般用于 getter 函数 或者仅输出一个数据值的操作符。而非纯函数可以自由地修改状态。
☆ UE4第三方库调用机制
UE4 被划分为多个模块。每个模块都拥有控制其编译方式的 .build.cs 文件,包括定义模块相依性的选项、额外的库、包含路径等。这些模块被默认编译为 DLL 文件,可通过单一可执行文件进行加载。可选择在 BuildConfiguration.cs 文件中编译一个单块可执行文件。
模块是 UE4 的编译块。引擎作为模块的一个大集合而实现,而游戏则提供其自身的模块进行扩大。每个模块都封装了一套功能,可提供一个公共接口和编译环境(利用宏、包含路径等),以便其他模块使用。
模块通过带 .build.cs 扩展名的 C# 源文件进行声明,保存在项目的 Source 目录下。属于模块的 C++ 源代码保存在 .build.cs 文件旁,或其子目录中。每个 .build.cs 文件声明派生自 ModuleRules 基类的类,并设置属性控制器从构造函数进行编译的方式。这些 .build.cs 文件由虚幻编译工具编译,并被构造来确定整体编译环境。
☆ 代理
代理允许您在C++对象上以通用的但类型安全的方式调用成员函数。通过使用代理,您可以将其动态地绑定到任何对象的成员函数上,然后在该对象上调用函数,即时调用者不知道该对象的类型也没关系。
http://api.unrealengine.com/CHN/Programming/UnrealArchitecture/Delegates/index.html
class FLogWriter
{
void WriteToLog( FString );
};
(第一步,声明宏)要想调用WriteToLog函数,我们需要用宏声明的方法,创建针对该函数签名的代理类型:
DECLARE_DELEGATE_OneParam( FStringDelegate, FString );
这创建了一个称为 'FStringDelegate' 的代理类型,取入一个 'FString' 类型的参数。
(第二步,创建代理对象)如果要在一个类中使用FStringDelegate,调用如下:
class FMyClass
{
FStringDelegate WriteToLogDelegate;
};
这允许FMyClass得以维护一个指向任意一个类的方法,这个类对于该代理类型唯一需要知道的就是它的函数签名WriteToLogDelegate。
(第三步,绑定代理到方法上)若要分配这个代理,首先要创建 'FLogWriter' 类的一个实例LogWriter,然后创建那个'FLogWriter'类对象实例的 'WriteToLog' 方法的代理,从而把一个代理绑定到一个类的方法上
FSharedRef< FLogWriter > LogWriter( new FLogWriter() );
WriteToLogDelegate.BindSP( LogWriter, &FLogWriter::WriteToLog );// 绑定一个基于共享指针的成员函数代理。
(第四步,调用)现在,FMyClass就可以调用FLogWriter 中的‘WriteToLog'方法了,甚至它不需要知道关于 'FLogWriter' 的任何信息。要想调用您的代理,仅需使用 'Execute()' 方法。
WriteToLogDelegate.Execute( TEXT( "Delegates are spiffy!" ) );
UE4杂记的更多相关文章
- ue4 杂记
c++获取GameMode if(GetWorld()) { auto gamemode = (ASomeGameMode*)GetWorld()->GetAuthGameMode(); } 或 ...
- ue4 动画相关方法杂记
加载资源文件中的 骨骼,动画,蒙太奇----------------------------------------- FName anis("/Game/FirstPerson/Anima ...
- UE4新手引导之下载和安装虚幻4游戏引擎
1) 进入虚幻4的官方主页(https://www.unrealengine.com/) 这里你可以获得关于虚幻4的最新资讯,包括版本更新.博客更新.新闻和商城等.自2015年起,该引擎已经提供免费下 ...
- UE4新手引导入门教程
请大家去这个地址下载:file:///D:/UE4%20Doc/虚幻4新手引导入门教程.pdf
- [Erlang 0118] Erlang 杂记 V
我在知乎回答问题不多,这个问题: "对你职业生涯帮助最大的习惯是什么?它是如何帮助你的?",我还是主动回答了一下. 做笔记 一开始笔记软件做的不好的时候就发邮件给自己, ...
- ue4 c++学习推荐
我由易到难推荐,不过在此之前还是先看看官方对于VS设置的推荐: https://docs.unrealengine.com/latest/INT/Programming/Development/Vis ...
- 如何创建独立的UE4服务端
原文作者:@玄冬Wong 转载请注明原文出处:http://aigo.iteye.com/blog/2268777 这是论坛上对UE服务端功能的回答,意思是UE4提供了主流MMO网游服务端所具备的特性 ...
- Ubuntu杂记——Ubuntu下用虚拟机共享上网
由于最近把自己电脑环境换成了Ubuntu,但学校的网络是电信的闪讯,大学里用过的人都知道这货有多坑,而且没有Linux客户端,上网都是问题,怪不得国内用Linux的人那么少,特别是高校的学生(让我瞎逼 ...
- 《Inside UE4》目录
<Inside UE4>目录 InsideUE4 UE4无疑是非常优秀的世界上最顶尖的引擎之一,性能和效果都非常出众,编辑器工作流也非常的出色,更难得宝贵的是完全的开源让我们有机会去从中吸 ...
随机推荐
- linux下安装zabbix
1.安装源:sudo rpm -ivh http://repo.zabbix.com/zabbix/3.2/rhel/6/i386/zabbix-release-3.2-1.el6.noarch.rp ...
- 云笔记项目- 上传文件报错"java.lang.IllegalStateException: File has been moved - cannot be read again"
在做文件上传时,当写入上传的文件到文件时,会报错“java.lang.IllegalStateException: File has been moved - cannot be read again ...
- Game Engine Architecture 9
[Game Engine Architecture 9] 1.Formatted Output with OutputDebugString() int VDebugPrintF(const char ...
- step_by_step_记录deepin下curl安装过程
记录 deepin 下 curl 安装过程 wget https://curl.haxx.se/download/curl-7.55.1.tar.gz .tar.gz cd curl-/ ./conf ...
- 微信小程序如何接入?
1.线下扫码:小程序最基础的获取方式,是二维码.大家可以打开扫一扫,通过微信扫描线下二维码的方式进入小程序.这也是官方宣传中,最普遍的实用场景. 如何生成小程序导入码? 2.微信搜索 3.公众号关联 ...
- python学习中遇到的错误及解决办法
1. nodename nor servname provided 原因:Python程序中有段程序调用 socket.gethostbyname(socket.gethostname()) sock ...
- Linux console 重定向
Linux从启动到启动完成的所有输出均复制到Com口上,一共需要修改3个文件.在此之前还要确认/sbin/agetty文件是否存在,此文件用来把系统的输入输出映射到其它设备上. 1.首先在 /etc/ ...
- 测H5
如果原文本自带样式,需要测在h5里能否正常展示
- pycharm 有些模块没有提示 解决方法
解决方法:右键模块所在文件夹,选择make directory as ,选择excluded或者sources root,即可.
- angular使用sass的scss语法
一.现象 为了简写样式 二.解决 1.安装sass ,利用npm 安装(npm工具如果没有,请先自行安装好) (1).npm install node-sass --save-dev (2).npm ...