UE4 C++ 笔记
1.获取当前的GameMode:GameMode = Cast<你GameMode的类名>( UGameplayStatics::GetGameMode(this));
2.输出日志Debug UE_LOG(LogTemp, Log, TEXT("StartPoint:%s"), *StarPoint.ToString()); %d表示按整型数据的实际长度输出数据、%c用来输出一个字符、%s用来输出一个字符串、%x表示以十六进制数形式输出整数。

3.给碰撞组件动态绑定碰撞函数:GetCapsuleComponent()->OnComponentBeginOverlap.AddDynamic(this, &你的类名::你的函数名);
4.Character键值绑定,键轴绑定:
void APacManCharacter::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent)
{
Super::SetupPlayerInputComponent(PlayerInputComponent);
PlayerInputComponent->BindAxis("MoveX", this, &你的character类::MoveXAxis);
PlayerInputComponent->BindAxis("MoveY", this, &你的character类::MoveYAxis);
PlayerInputComponent->BindAction("NewGame",IE_Pressed, this, &你的character类::NewG);
PlayerInputComponent->BindAction("Restart", IE_Pressed, this, &你的character类::RS);
PlayerInputComponent->BindAction("Pause", IE_Pressed, this, &你的character类::Pa);
}
5.添加队列,遍历每个元素:定义头文件 TArray<class AEnemy*> Enemys; 在cpp里引入头文件 #include"Public/EngineUtils.h" 然后在队列里添加元素
for (TActorIterator<AEnemy> EnemyItr(GetWorld()); EnemyItr; ++EnemyItr)
{
AEnemy* enemy = Cast<AEnemy>(*EnemyItr);
if (enemy)
{
Enemys.Add(enemy);
}
}
遍历列表中的每个元素,调用每个元素的方法
for (auto Iter(Enemys.CreateIterator()); Iter; Iter++)
{
(*Iter)->Destroy();
}
6.FORCEINLINE 内联函数,目的是为了提高函数的执行效率。声明类型后再直接在头文件下面添加FORCEINLINE关键字:
EGameState GetCurrentState() const;
FORCEINLINE EGameState 你的GameMode类名::GetCurrentState() const
{
return currentState;
}
7.定时器:在头文件里定义一个FTimerHandle TimeVulnerable; 在cpp里引入头文件#include"Public/TimerManager.h"
GetWorldTimerManager().SetTimer(TimeVulnerable, this, &你的类::时间结束后执行的函数, 你的时间.0f, bool是否循环);
8.利用ConstructorHelpers来找资源:引入头文件#include"UObject/ConstructorHelpers.h"
然后开始找资源 例如 static ConstructorHelpers::FObjectFinder<UStaticMesh> CylinderObj(TEXT("'/Game/StarterContent/Shapes/Shape_Cylinder'"));
安全校验 如果查找成功 if (CylinderObj.Succeeded())
9.创建一个staticmeshcomponent:在头文件里定义一个指针变量 UStaticMeshComponent* EnemyBody; 然后在cpp里引入头文件 #include"Components/StaticMeshComponent.h"
再在构造函数里创建mesh资源 EnemyBody = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("Body"));
10.C++AI,继承AAIController 可重写两个虚函数
.h头文件里重写 virtual void Possess(class APawn* InPawn) override; 相当于beginplay 游戏刚开始的时候调用的函数
.cpp里实现函数前要先调用父类的方法 Super::Possess(InPawn);
void AAIEnemy::Possess(class APawn* InPawn)
{
Super::Possess(InPawn);
}
第二个是重写移动完成后的函数
.h头文件里重写 virtual void OnMoveCompleted(FAIRequestID RequestID, const FPathFollowingResult& Result) override; 参数尽量保持一致
.cpp里实现移动完成后寻找下一个点
void AAIEnemy::OnMoveCompleted(FAIRequestID RequestID, const FPathFollowingResult & Result)
{
SearchNewPoint();
}
10.导航网格实现路径寻找:
void AAIEnemy::SearchNewPoint()
{
UNavigationSystem* NavMesh = UNavigationSystem::GetCurrent(this);
if (NavMesh)
{
const float SearchRadius = 10000.0f; //搜寻半径
FNavLocation RamdomPt;
const bool bFound = NavMesh->GetRandomReachablePointInRadius(Bot->GetActorLocation(),SearchRadius,RamdomPt);
if (bFound)
{
MoveToLocation(RamdomPt);
}
}
11.C++绘制HUD:新建一个C++类继承AHUD类 头文件重写DrawHUD函数 virtual void DrawHUD() override;
然后在cpp里实现在屏幕上中央打印文字
DrawText(TEXT("Hello")
, FColor::White, (Canvas->SizeX) / 2.0f-150, (Canvas->SizeY) / 2.0f-100, HUDFont);
12.获取当前角色character:你的Character类* Man = Cast<你的Character类>(UGameplayStatics::GetPlayerPawn(this, 0))
13.物体碰撞函数及参数设置:
UFUNCTION()
void OnCollision(class UPrimitiveComponent* HitComp, class AActor* OtherActor, class UPrimitiveComponent* OtherComponent, int OtherBodyIndex, bool bFromSweep, const FHitResult &SweepResult);
实现:
void AEnemy::OnCollision(UPrimitiveComponent * HitComp, AActor * OtherActor, UPrimitiveComponent * OtherComponent, int OtherBodyIndex, bool bFromSweep, const FHitResult & SweepResult)
{
if (OtherActor->IsA(你的Character类::StaticClass())) //判断碰到的物体是不是主角
}
UE4 C++ 笔记的更多相关文章
- UE4学习笔记(三): 为什么使用C++替代UnrealScript?
原文链接: https://forums.unrealengine.com/showthread.php?2574-Why-C-for-Unreal-4&p=16252&viewful ...
- UE4物理笔记
基本 物理资源随骨骼创建,可添加到骨骼网格上. 物理材质可添加到材质或组件或物理资源上. 通过配置PrimitiveComponent组件的Collision Presets值,可实现自定义的碰撞忽略 ...
- UE4 编译笔记
UE4 的功能被分成了很多的模块,在API文档里每个类都有 Module 这个属性(值为模块名)每个模块使用其他模块要在Build.cs里导入,像vs里的引入库.在构建时 PublicDependen ...
- UE4 小笔记
1,设置postprocess材质时使用Add or Update Blendable 用Make PostprocessSetting会报警告,因为C++代码中没有设置为BlueprintReadW ...
- UE4渲染笔记
Lightmass 实时渲染光影效果对性能有很大影响,可利用lightmass预先生成光影贴图,然后在游戏中使用. 将场景光照结果完全烘焙到模型贴图上,从而完完全全的假冒现实光照效果. 文档上是 li ...
- UE4 PostProcessVolume笔记
透镜:Lens Bloom 光溢出 VDirt Mask 光溢出泥土蒙版 Depth of Filed 景深 V Eye Adaptation (Auto-Exposure) 人眼适应 V这个效果有时 ...
- Aery的UE4 C++游戏开发之旅(3)蓝图
目录 蓝图 蓝图命名规范 蓝图优化 暴露C++至蓝图 暴露C++类 暴露C++属性 暴露C++函数 暴露C++结构体/枚举 暴露C++接口 蓝图和C++的结合方案 使用继承重写蓝图 使用组合重写蓝图 ...
- UE4 中Struct Emum 类型的定义方式 笔记
UE4 基础,但是不经常用总是忘记,做个笔记加深记忆: 图方便就随便贴一个项目中的STRUCT和 Enum 的.h 文件 Note:虽然USTRUCT可以定义函数,但是不能加UFUNCTION 标签喔 ...
- UE4入门学习笔记开篇
做了3年的Unity, 现在开始转入到做UE4,一来就进入一个超大项目组中学习,度过了最初2个月的生涩和紧张后,现在准备开始慢慢总结,慢慢学习,逐步深入理解和研究UE. 做了3年的游戏开发后,个人感悟 ...
随机推荐
- Reac全家桶笔记
函数作为无状态组件的使用: const EllipsisTdContent = ({ text, width }) => { return ( <div className="t ...
- C# .NET newtonsoft.json 多版本冲突解决
A.DLL 引用了6.0 的 newtonsoft.json (V2 运行时),B.DLL 引用了10.0 的 newtonsoft.json (V4 运行时). 可以在.CONFIG RUNTIM ...
- 关于eth0 eth0:1 和eth0.1关系介绍
eth0 eth0:1 和eth0.1三者的关系对应于物理网卡.子网卡.虚拟VLAN网卡的关系:物理网卡:物理网卡这里指的是服务器上实际的网络接口设备,这里我服务器上双网卡,在系统中看到的2个物理网卡 ...
- java Servlet生成随机验证码
import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.Graphics2D; i ...
- Lubuntu下小巧好用的Python编辑工具Geany
在Lubuntu系统上有很多的Python编辑器,如eclipse,PyCharm等,功能繁多,市场占有率高,但动辄几百M的体积有些巨大,博主今天推荐一款精简且易用的Python开发工具--Geany ...
- mysql原生分页
select * from table limit (pageNo-1)*pageSize, pageSize; 一:分页需求: 客户端通过传递start(页码),limit(每页显示的条数)两个参数 ...
- 基于IPV6数据包分析(GNS3)
1:实验拓扑 2:检测路由之间的连通性 路由器R4 ping 各路由器 R1路由表 R4路由表 3:抓包分析 A:回送请求报文(Echo Request) (128) Type=128, ...
- [UE4]接口
一个椅子可以被抓起和放下,一扇门可以打开和关上.一个抽屉可以拉开和关上. 椅子.门.抽屉都可以用手拉,然后放下,但是它们的打开和关上的行为是不一样的,它们之间没有继承关系,没法共用“打开”和“关闭”的 ...
- 知识点:Mysql 索引原理完全手册(2)
知识点:Mysql 索引原理完全手册(1) 知识点:Mysql 索引原理完全手册(2) 知识点:Mysql 索引优化实战(3) 知识点:Mysql 数据库索引优化实战(4) 八. 联合索引与覆盖索引 ...
- solidworks的工程图模板文件和图纸格式文件
工程图模板文件:drwdot,这个文件是在新建工程图的时候,可以选择的,如下. 图纸格式文件:slddrt,这个文件是进入工程图环境,编辑[图纸属性]的时候,可以选择的.如下. 怎么定制上述两种文件? ...