【UE4】将蓝图方法转为C++方法的常用函数

1. 调试打印

蓝图中的完整节点:

C++中的实现:
GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Red, TEXT("Hello"));
参数的意义:

在这里插入图片描述

  • Key:防止同一消息被多次添加的唯一密钥。用 -1就行了

2. 输入绑定(轴映射)

在这里插入图片描述

  • 在项目中创建了输入绑定,需要在蓝图或者C++中给这些输入赋予事件
蓝图方法:

在这里插入图片描述

  • 蓝图中直接搜索名字创建事件,然后把输入后的操作连在后面就行了。
C++中的实现:
	PlayerInputComponent->BindAxis("MoveForward",this,&AMainChar::MoveForward);
  • C++ 中的绑定函数
参数的意义:

在这里插入图片描述

  • 第一个参数是操作的名字,对应我们在项目设置中的"MoveForward"
  • 第二个参数是对象,写this就好了
  • 第三个参数是绑定的函数指针。
void AMainChar::MoveForward(float Value)
  • 轴映射绑定的函数是这样的形式,需要一个float参数。函数里的逻辑就根据实际情况实现。


3. 输入绑定(操作映射)

在这里插入图片描述

蓝图中的完整节点:

在这里插入图片描述

  • 操作映射相比轴映射,多了Pressed和Released的判断,少了Axis输入,这在C++里面也有体现。
C++中的实现:
PlayerInputComponent->BindAction("Attack",IE_Pressed,this,&AMainChar::Attack);
参数的意义:

在这里插入图片描述

  • 第二个参数变成了KeyEvent,可以选IE_Pressed和IE_Released,分别代表按下和放开按键。剩下的和轴映射一样。
void AMainChar::Attack()
  • 绑定的函数就没有float输入了

4. 播放动画蒙太奇

蓝图中的节点:

在这里插入图片描述

C++中的实现:
	PlayAnimMontage(DeathMontage);
  • 接口非常简单,就是一个PlayAnimMontage,参数就是一个UAnimMontage *的变量。但是问题是我们怎么选择到需要的蒙太奇。
不太好的实现:
  • 相比于在蓝图中可以选择资产,C++需要用到文件操作,通过繁杂的文件路径去查找。
static ConstructorHelpers::FObjectFinder<UAnimMontage> DieMontageObject(TEXT("AnimMontage'/Game/Extra/Red_Knight/Animations/MonDieFront.MonDieFront'"));
  • 这是我以前项目中C++寻找动画蒙太奇资产的代码。后来因为文件位置迁移也变得不可用了。可见这种写法是不太行的。
改进的方法:
	UPROPERTY(BlueprintReadWrite,EditAnywhere)
	UAnimMontage * DeathMontage ;
  • 我们依然会创建一个蒙太奇变量,但是在UPROPERTY里面加上EditAnywhere。

在这里插入图片描述

  • 这样一来,在创建的子蓝图类就可以设置蒙太奇资产了。


5. 创建和设置组件

蓝图方法:

在这里插入图片描述
用Actor的运动组件为例子,蓝图就直接创建就行了。

C++中的实现:
.h文件中:
	UPROPERTY(BlueprintReadWrite)
	UProjectileMovementComponent* ProjectileMovementComponent ;
.cpp文件中
if(!ProjectileMovementComponent)
{
	ProjectileMovementComponent = CreateDefaultSubobject<UProjectileMovementComponent>(TEXT("ProjectileMovementComponent"));
	//创建组件	
	ProjectileMovementComponent-> SetUpdatedComponent(RootComponent) ;
	ProjectileMovementComponent->InitialSpeed = 1000.0f ;
	ProjectileMovementComponent->MaxSpeed = 1000.0f ;
	ProjectileMovementComponent->bRotationFollowsVelocity=true ;
}
  • 在.h中定义,在CPP文件中创建组件,并设置其中的属性。
  • 创建组件的函数:组件 = CreateDefaultSubobject<组件类>(TEXT(“组件命名”))


6. 定时器/Timer

蓝图中的完整节点:

在这里插入图片描述

C++中的实现:
FTimerHandle PrintTimer;
GetWorldTimerManager().SetTimer(PrintTimer,this,&ABaseCharacter::PrintTest,2.0f,true,0.0f);

先创建一个FTimerHandle这样的变量,然后调用函数。

参数的意义:

在这里插入图片描述

  • 第一个参数其实就是刚才创建的FTimerHandle
  • 第二个参数是委托对象,一般用自己(this)
  • 第三个参数就是需要绑定的函数指针
  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
UE4中,可以通过蓝图调用C++全局函数。首先,需要在C++代码中声明并实现全局函数。具体的步骤如下: 1. 打开UE4的项目代码文件夹,并找到对应的.h头文件和.cpp源文件。 2. 在.h头文件中声明全局函数。例如,可以在声明文件的末尾添加如下代码: ``` #pragma once #include "CoreMinimal.h" UCLASS() class MYPROJECT_API UMyBlueprintFunctionLibrary : public UBlueprintFunctionLibrary { GENERATED_BODY() public: UFUNCTION(BlueprintCallable, Category = "MyFunctions") static void MyGlobalFunction(); }; ``` 3. 在.cpp源文件中实现全局函数。例如,可以在源文件的末尾添加如下代码: ``` #include "MyBlueprintFunctionLibrary.h" void UMyBlueprintFunctionLibrary::MyGlobalFunction() { // 在此处实现全局函数的逻辑 // 例如,可以在这里添加打印语句 UE_LOG(LogTemp, Warning, TEXT("调用了全局函数!")); } ``` 4. 保存并编译C++代码,确保函数成功添加到UE4项目中。 接下来,在蓝图中调用该全局函数的步骤如下: 1. 打开UE4蓝图编辑器。 2. 在蓝图中选择要调用全局函数的节点。 3. 在蓝图编辑器右侧的详情面板中,找到“蓝图调用”节点。 4. 从“蓝图调用”节点的输出引脚拖出连接线,并将其链接到“执行入口”节点。 5. 在连接线上右键点击并选择“Convert to Previous C++ Function Call”(转换为C++函数调用)。 6. 在“函数调用”节点的类下拉菜单中选择“UMyBlueprintFunctionLibrary”。 7. 在函数下拉菜单中选择要调用的全局函数,例如“MyGlobalFunction”。 8. 保存蓝图并点击运行即可调用全局函数。 通过以上步骤,就可以在UE4中使用蓝图调用C++全局函数了。调用全局函数可以方便地实现一些复杂的逻辑和功能,提高UE4项目的灵活性和扩展性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值