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++ 笔记的更多相关文章

  1. UE4学习笔记(三): 为什么使用C++替代UnrealScript?

    原文链接: https://forums.unrealengine.com/showthread.php?2574-Why-C-for-Unreal-4&p=16252&viewful ...

  2. UE4物理笔记

    基本 物理资源随骨骼创建,可添加到骨骼网格上. 物理材质可添加到材质或组件或物理资源上. 通过配置PrimitiveComponent组件的Collision Presets值,可实现自定义的碰撞忽略 ...

  3. UE4 编译笔记

    UE4 的功能被分成了很多的模块,在API文档里每个类都有 Module 这个属性(值为模块名)每个模块使用其他模块要在Build.cs里导入,像vs里的引入库.在构建时 PublicDependen ...

  4. UE4 小笔记

    1,设置postprocess材质时使用Add or Update Blendable 用Make PostprocessSetting会报警告,因为C++代码中没有设置为BlueprintReadW ...

  5. UE4渲染笔记

    Lightmass 实时渲染光影效果对性能有很大影响,可利用lightmass预先生成光影贴图,然后在游戏中使用. 将场景光照结果完全烘焙到模型贴图上,从而完完全全的假冒现实光照效果. 文档上是 li ...

  6. UE4 PostProcessVolume笔记

    透镜:Lens Bloom 光溢出 VDirt Mask 光溢出泥土蒙版 Depth of Filed 景深 V Eye Adaptation (Auto-Exposure) 人眼适应 V这个效果有时 ...

  7. Aery的UE4 C++游戏开发之旅(3)蓝图

    目录 蓝图 蓝图命名规范 蓝图优化 暴露C++至蓝图 暴露C++类 暴露C++属性 暴露C++函数 暴露C++结构体/枚举 暴露C++接口 蓝图和C++的结合方案 使用继承重写蓝图 使用组合重写蓝图 ...

  8. UE4 中Struct Emum 类型的定义方式 笔记

    UE4 基础,但是不经常用总是忘记,做个笔记加深记忆: 图方便就随便贴一个项目中的STRUCT和 Enum 的.h 文件 Note:虽然USTRUCT可以定义函数,但是不能加UFUNCTION 标签喔 ...

  9. UE4入门学习笔记开篇

    做了3年的Unity, 现在开始转入到做UE4,一来就进入一个超大项目组中学习,度过了最初2个月的生涩和紧张后,现在准备开始慢慢总结,慢慢学习,逐步深入理解和研究UE. 做了3年的游戏开发后,个人感悟 ...

随机推荐

  1. Jmeter 传 PUT 请求方式

    最近用 Jmeter 发送 PUT 请求,踩了个坑,现记录如下: 难点在在于 body 内有一大串 json 形式的内容 1.PUT 请求的 body 内,直接将 json串传 form-data 形 ...

  2. angularjs 学习小结

    1.过滤器的使用 <!DOCTYPE html> <html> <head> <meta charset="{CHARSET}"> ...

  3. MySQL表介绍

    MySQL InnoDB表介绍 一.索引组织表 在InnoDB引擎中,表都是根据主键顺序存放的.这种存储方式称为索引组织表,在InnoDB引擎中,每张表都有逐渐.如果没有显示定义主键,则引擎会按照以下 ...

  4. EntityFramework Inner Exception Catch

    在保存时加入这一段,就可以查看error具体是哪里出错了.正式发布需要删除这段,try catch毕竟会影响性能 try { entity.SaveChanges(); } catch (DbEnti ...

  5. go语言学习--string、int、int64互相转换,字符串的截取,数组和字符串的转换

    下面总结了go中常用的转换 #string到int int,err:=strconv.Atoi(string) #string到int64 int64, err := strconv.ParseInt ...

  6. Python抓取百度汉字笔画的gif

    偶然发现百度汉语里面,有一笔一划的汉字顺序:          觉得这个动态的图片,等以后娃长大了,可以用这个教写字.然后就去找找常用汉字,现代汉语常用字表 .拿到这里面的汉字,做两个数组出来,一共是 ...

  7. 在思科模拟器上配置AAA认证

    1.实验拓扑 2.检测用户之间连通性 PC2 ping PC-A PC-C  ping   PC-A 3.路由及服务器配置 R1:在路由器R1上配置一个本地用户账号并且利用本地AAA通过console ...

  8. CDNI - RFC 6707 翻译

    CDNI的相关问题陈述 概述 CDN对可缓存内容提供了许多好处:降低交付成本,提高终端用户体验,提高交付的鲁棒性.对于这些因素,CDN常 用于大规模的内容交付.因此,现有的CDN提供商正在扩大规模,许 ...

  9. jquery操作select下拉框的各种方法,获取选中项的值或文本,根据指定的值或文本选中select的option项等

    简介jquery里对select进行各种操作的方法,如联动.取值.根据值或文本来选中指定的select下拉框指定的option选项,读取select选中项的值和文本等. 这一章,站长总结一下jquer ...

  10. class中限定绑定属性__slots__方法

    使用__slots__但是,如果我们想要限制class的属性怎么办?比如,只允许对Student实例添加name和age属性.为了达到限制的目的,Python允许在定义class的时候,定义一个特殊的 ...