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

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

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)
  • 第三个参数就是需要绑定的函数指针

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/921093.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-16
下一篇 2022-05-16

发表评论

登录后才能评论

评论列表(0条)

保存