自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

实习生小黄的博客

小小工具人的学习笔记

  • 博客(19)
  • 收藏
  • 关注

原创 UE C++中GetOverlappingActors正确用法,关于ClassFilter

背景:用到UE的自带函数GetOverlappingActors,检测碰撞框是否和NPC产生重叠,由于碰状框经常和许多东西重叠,直接检测会有不必要的对象被写入结果数组,浪费性能。函数中的第二个参数ClassFilter可以根据类型进行过滤,使不关注的类对象都被排除在外。//引擎中该函数的声明void UPrimitiveComponent::GetOverlappingActors(TArray<AActor*>& OutOverlappingActors, TSubclassOf

2020-09-28 21:57:29 1609 2

原创 UE C++ 把Enum枚举转成FString字符串,最简单方法3行

创建一个函数专门处理枚举到字符串的转换,方法很简单只要3行。且可以根据需求,选择用没有前缀的干净的短字符串或者有前缀枚举值限定的长字符串。性能开销可能不怎么好,不过方便。...

2020-09-20 13:38:58 3162

原创 UE C++两种常用又简单的位移方法

1、AddMovementInput如果是继承自APawn和ACharacter的类,可以用AddMovementInput函数,属于APawn上面的UPawnMovementComponent组件的功能AddMovementInput(FVector WorldDirection, float ScaleValue, bool bForce /*=false*/)2、SimpleMoveTo……首先要引入头文件#include "Blueprint/AIBlueprintHelperLibrary

2020-08-04 18:17:40 1572

原创 UE C++简单判断点击的是否是UI

最简单的是通过PlayerController里现成的函数来判断,只要两步。1、只要是继承了APlayerController 的控制器,都可以用GetHud()来获得整个Game运行状态中的常驻HUD。2、HUD里封装的GetHitBoxAtCoordinates()函数,传入一个2D坐标,如果在UI元素范围内则返回FHUDHitBox结构,其中包含了虚幻计算的中间变量的但不用去关心,如果不在UI范围则返回nullptr。那么判断是否点击的是UI,代码例子:if(GetHUD() != NULL

2020-08-04 15:34:54 1126

原创 UE C++获取鼠标点击的常用两种方法

1、APlayerController封装的简便方法只要是继承于ACharacter或APawn类的,都可以把Controller转换成APlayerController来用GetHitResultUnderCursor这个函数,本质上其实是射线检测GetWorld()->LineTraceSingleByChannel,只是做了很多安全判断,比如保证获得玩家屏幕,保证点击的不是UI。通过Hit传引用进去,传结果出来。Hit.bBlockingHit代表检测到了物体2、射线检测GetWorl

2020-08-04 15:17:34 2704

原创 UE4 C++定义接口的方法

在cpp中定义接口

2020-07-26 16:26:18 419

原创 UE4 C++官方AI感知组件的简单设置UAIPerceptionComponent

AI感知的基础设置其实AI感知组件可以在蓝图里创建,哪怕要代码里设置,也可以对照着蓝图里的项目一条条看。唯一要注意的是,该组件有个每帧执行检测的函数OnPerceptionUpdated,我们可以把自己的检测函数绑定在上面,要注意函数签名一致。对着官方的OnPerceptionUpdated函数追述申明,可以看到函数签名的格式。每帧会向函数中传入AActor的数组,里面是AI感知探测到的对象。...

2020-07-25 14:11:12 1213 2

原创 UE4 C++求距离的3个常用方法

判断两个物体间的距离:方法特别多,记录下来看将来是不是用得到。1、Actor类自带函数比如MyPawn->GetDistanceTo(TargetActor)获得自身与目标之间的距离。第二个是获得距离的平方,少一个开方运算,可以少点计算量,但使用是不能忘了是平方值。2、直接用向量求距离其实Actor类的自带函数,内部实现也是用的这个。3、FVector结构体中的静态函数搞了两个名字,其实是同一个Dist函数。实现方式都是很基础的运算,同样Dist比DistSquared多一个开

2020-07-25 10:40:20 3679

原创 UE4 C++ PlayerController中绑定输入

在继承ACharacter和APawn的类中,输入绑定函数已经在文件中写好了,直接往里面填就可以。但是继承自APlayerController的新建类里面一片空白,什么都需要自己一步步写出来。APawn中的输入绑定函数是SetupPlayerInputComponent。而Play儿Controller中的输入绑定函数是SetupInputComponent,中间少个Player要注意不要弄混了...

2020-05-05 18:27:05 3593 1

原创 UE4 设置鼠标输入为游戏/ui模式、锁定鼠标于视口内、是否隐藏鼠标

使用例子:详细设置:一、输入模式:首先要确定要用的输入模式是哪种,总共有3种分别是:1、控制游戏内逻辑和UI,2、只控制游戏内逻辑,3、只控制ui二、鼠标锁定在视口内总共有4种选择:1、不锁定鼠标, 2、永远锁定鼠标, 3、只有全屏时锁定鼠标, 4、只有按下鼠标并拖动时锁定鼠标三、拖动时隐藏鼠标如果设为true,按下鼠标拖动时会临时隐藏鼠标应用设置最后记得要SetInpu...

2020-05-05 17:58:14 8988 2

原创 UE4 通过Controller获取屏幕尺寸,鼠标位置

PlayerController下的GetViewportSize和GetMousePosition都是引用传参,所以要事先声明并初始化好参数传入,新的结果会返回给原变量。获取屏幕和鼠标信息的操作推荐通过PlayerController来完成。...

2020-05-05 17:34:00 1900

原创 UserWidget和WidgetComponent的区别

一、UserWidgetUserWidget属于UUserWidget类,经常用作放在主屏幕的UI。创建UserWidget做法是用CreateWidget函数创建一个UserWidget实例,属于0号PlayerController。这里的MainUiClass继承于UUserWidget代表自己定义的UI界面的类。最终要显示在0号玩家的屏幕上,要用AddToViewport函数。补...

2020-03-30 15:45:32 3149

原创 UE4 c++绘制调试线框

1、引入头文件#include "Kismet/KismetSystemLibrary.h"2、调用静态方法UKismetSystemLibrary::DrawDebugSphere();就可以画个圆。其他还有大量的DrawDebug函数3、设置调试框的存在时间由于默认的绘制时间是0.0秒,所以一定要自己射一个时间才能看得到。比如这是画一个圆,在自定义Location位置,半径2...

2020-03-26 16:03:23 1522

原创 UE4 c++ 使用AI控制器基本步骤

1、在项目的“Source/项目名”目录下,找到“项目名.Build.cs”文件。2、在PublicDependencyModuleNames中加入模块名AIModule。3、在需要使用AI控制器的目标类的cpp中include头文件AIController.h4、需要使用AI的目标类中,其实继承了APawn类的一个字段AutoPossessAI,给它赋值后,目标类受AI控制。Aut...

2020-03-26 14:34:41 1650

原创 UE4 c++删除组件

在代码中删除组件很简单,只要DestroyComponent()函数就可以了,使用之前注意引入组件对应类的头文件。但是遇到一个问题,在细节上犯了个小错误,导致引擎立马奔溃。问题重现:1、首先,创建了一个mesh组件。命名伟WeaponMesh01。2、然后经过了一堆逻辑后,特定条件下,需要删除此组件,于是DestroyComponent了。3、又在一个特殊的情况下,需要重新再创建mes...

2020-03-23 21:58:38 2574 1

原创 UE4 c++中声明枚举类型的格式

UE4 c++中声明枚举类型的格式1、关键词enum2、类前记得加上UENUM(BlueprintType)3、枚举成员命名,建议开头带上枚举类型的首字母缩写,如EPMS_4、每个枚举成员后面,建议加上UMETA(DisplayName = "xxxx"),在蓝图中调用显示更友好5、成员之间用逗号分隔6、大阔后最后,要加上分号之后使用就很简单了。...

2020-03-23 17:33:26 1409

原创 UE4 c++编程,最近常用的头文件

UE4 c++编程,最近常用的头文件Include相关类作用Components/BoxComponent.hUBoxComponent盒体触发器Components/CapsuleComponent.hUCapsuleComponent胶囊触发器,SetCapsuleSizeBlueprint/UserWidget.hUUserWidgetUI...

2020-03-22 14:19:25 4010 2

原创 UFUNCTION宏,BlueprintNativeEvent用法

之前用BlueprintImplementableEvent标记,创建的函数在c++中不做具体实现,实现放在蓝图中完成。UFUNCTION(BlueprintImplementableEvent, Category = "Triggerable Door|Door Switch")void OpenDoor();UFUNCTION(BlueprintImplementableEvent, C...

2020-03-21 17:28:47 902

原创 UE4 c++中声明事件并提供给蓝图定义

有些事情不适合在代码里做,比如创建一段Timeline并播放,甚至花式播放。在蓝图里花式创建timeline非常高效,所以就应该蓝图和西佳佳配合。c++里提供一个函数,函数声明在蓝图里完成,代码里只在合适的时候调用就好。先上段简单的代码#pragma once#include "CoreMinimal.h"#include "GameFramework/Actor.h"#includ...

2020-03-21 12:15:08 2507

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除