LearnCppUnreal

这篇博客记录了学习UE4 C++ Demo的过程,包括Git忽略文件,重要宏,头文件,API,结构体和类,VS2017的快捷键,以及C++与蓝图的调用方法。特别强调了C++调用蓝图的两种方式,推荐使用DECLARE_DYNAMIC_MULTICAST_DELEGATE进行事件交互。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

LearnCppUnreal

学习 UE4 C++ Demo 笔记

1. UE4 工程在使用 Git 时可以忽略的文件

  • .vs/
  • Binaries/
  • Intermediate/
  • Saved/
  • Content/StarterContent/

2. UE4 C++中几个重要的宏

代码:

UPROPERTY(EditAnywhere, BlueprintReadWrite) //可以有很多参数,详情可以去官网API查找
ATriggerVolume * TriggerArea = nullptr;

解释:
UPROPERTY(EditAnywhere)
可以把代码里的变量暴露到引擎里,可以动态设置
BlueprintReadWrite
C++里的变量只有加了这个属性蓝图才可以访问和修改,还有一个 BlueprintReadOnly

UFUNCTION(BlueprintCallable, Category="XXX")

解释:
UFUNCTION(BlueprintCallable)
可以把C++的函数暴露给蓝图调用
Category
函数的话在蓝图中使用时会看到“XXX”的一个分页为自己的函数,具体可以尝试下看看,文字描述有点难以想象,不过用到了自然就知道了

DECLARE_DYNAMIC_MULTICAST_DELEGATE("XXXX");

解释:
DECLARE_DYNAMIC_MULTICAST_DELEGATE(XXX)
创建了一个委托事件可以用来和蓝图交互使用,详细下面有说

3. 用到的几个头文件

#include "GameFramework/Actor.h"
#include "Engine/World.h" // 获取世界的头文件
#include "DrawDebugHelpers.h" // 绘制线的头文件
#include "Engine/TriggerVolume.h" // 碰撞的头文件
不在多做赘述, 感觉没有什么意义, API官网可以搜

4. 用到的几个 API

GetWorld(); // 获取当前世界
GetFirstPlayerController(); // 获取世界中第一个玩家的Controller
GetPlayerViewPoint(); // 获取玩家的朝向和旋转
xyz.Vector(); // 取这个向量的一个朝向单位向量
DrawDebugLine(); // 画一条线
LineTraceSingleByObjectType(); // 发射一个射线,根据Object的type
HitResult.GetActor(); // 获取射线碰撞的Actor
TriggerArea->IsOverlappingActor(); // 检测区域中是否有Actor
PlayerController->GetPawn(); // 从PlayerController中获取主角Pawn
不在多做赘述, 感觉没有什么意义, API官网可以搜

5. 几个新认识的结构体和类

FVector  //向量 X Y Z
FRotator //旋转 Roll Pich Yall
FHitResult //射线的返回值 .....
FCollisionObjectQueryParams // 射线检测的碰撞类型
FCollisionQueryParams // 射线的一些通用参数 碰撞Tag, 碰撞精细度, 无视哪些碰撞

ECollisionChannel // 碰撞类型的枚举
EInputEvent //输入事件的类型 按下抬起等等
UPhysicsHandleComponent //物理手臂组件,可以快速的实现举起物品等等
UInputComponent // 输入事件接受组件 可以绑定是输入事件

6. VS2017配合 ReSharper的关键快捷键

Ctrl+E 快速跳转到别的文件 (貌似只支持最近关闭的文件,未测试大型项目是否可以快速跳转)
Ctrl + Shift + F7 查找鼠标选中的函数名变量名 鼠标必须选中一个东西
Ctrl + Tab 快速选择当前激活的文件切换
Ctrl + Alt + F 整理当前代码
Ctrl + B 代码跳转 可以从使用的地方跳转至定义的地方 (函数,变量或Class) 或从定义的地方跳转至使用的地方 (可能是多个,需要选择)
Alt + Enter ReSharper 的万能神器,可以对代码提出你可能需要的修改

7. UE4C++特别需要注意事项

指针变量使用时一定记得判断不为nullptr在进行使用,不判断后果很严重,直接回让引擎 Crash

8. C++与蓝图相互调用的几个方式

(1.) C++ 调用蓝图

使用CallFunctionByNameWithArguments进行调用,具体使用方法见官方文档API
使用DECLARE_DYNAMIC_MULTICAST_DELEGATE进行委托事件的注册并在想要调用的地方进行调用,蓝图来对该事件进行监听

(2.) 两者调用区别

CallFunctionByNameWithArguments 根据函数名字进行调用,耦合大,并且有局限性,必须在本组件内进行Call,意思就是你C++的代码想调用蓝图里的函数就必须要把函数写在继承当前C++的蓝图中
DECLARE_DYNAMIC_MULTICAST_DELEGATE 没有对函数名的耦合,也没有局限说必须要继承与当前C++来监听当前事件,可以在任意地方拿到c++的对象就可以对该事件监听,C++中可以在任意想要调用的地方进行调用和传参 (推荐)

(3.) 蓝图调用C++

首先在C++里把函数写好
加上UFUNCTION的宏里面传入BlueprintCallable
蓝图拿到对C++的Class的对象即可对函数进行调用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值