斯坦福UE4 + C++课程学习记录 6:角色跳跃与火药桶

目录

1. 角色跳跃

2. 创建火药桶类

3. 创建蓝图类


1. 角色跳跃

        实现角色跳跃十分简单,Character类中已经有相应的函数,因此只需要在控制输入的函数中添加一行代码:

PlayerInputComponent->BindAction("Jump", IE_Pressed, this, &ACharacter::Jump);

2. 创建火药桶类

        课程中的课后作业要求,用C++实现一个火药桶,在受击后会发生爆炸产生冲击波,并与周围的Actor产生物理交互。首先,需要创建SurExplosiveBarrel类,基类为AActor。该类包含两个关键组件:MeshComp和ForceComp,分别控制模型和爆炸的力场。UFUNCTION宏可将函数在蓝图中公开,以便开发者直接从蓝图调用或扩展函数。随后的实现部分直接参考了课程提供的源码,暂时没有理解代码中OnActorHit()的调用方式,待以后补充(该部分的内容已经补充至第12节,如果以下代码运行失败,请参考第12节的完整代码)。完整代码如下:

// SurExplosiveBarrel.h
#pragma once
#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "SurExplosiveBarrel.generated.h"

class UStaticMeshComponent;
class URadialForceComponent;

UCLASS()
class SURKEAUE_API ASurExplosiveBarrel : public AActor
{
	GENERATED_BODY()
	
public:	
	
	ASurExplosiveBarrel();

protected:

	UPROPERTY(VisibleAnywhere)
	UStaticMeshComponent* MeshComp;

	UPROPERTY(VisibleAnywhere)
	URadialForceComponent* ForceComp;

	UFUNCTION()
	void OnActorHit();

};
// SurExplosiveBarrel.cpp
#include "SurExplosiveBarrel.h"
#include "PhysicsEngine/RadialForceComponent.h"
#include "Components/StaticMeshComponent.h"

// Sets default values
ASurExplosiveBarrel::ASurExplosiveBarrel()
{
 
	MeshComp = CreateDefaultSubobject<UStaticMeshComponent>("MeshComp");
	// UE中的“模拟物理”选项
	MeshComp->SetSimulatePhysics(true);
	// 等同于在UE中将“碰撞预设”设置为“PhysicsActor”
	MeshComp->SetCollisionProfileName(UCollisionProfile::PhysicsActor_ProfileName);
	RootComponent = MeshComp;

	ForceComp = CreateDefaultSubobject<URadialForceComponent>("ForceComp");
	ForceComp->SetupAttachment(MeshComp);

	ForceComp->Radius = 750.0f;			 // 爆炸范围
	ForceComp->ImpulseStrength = 700.0f; // 冲击力
	ForceComp->bImpulseVelChange = true; // 忽略质量大小;见UE中ForceComp的“冲量速度变更”
}

void ASurExplosiveBarrel::OnActorHit()
{
	ForceComp->FireImpulse();
}

3. 创建蓝图类

        在UE中创建ExplosiveBarrel蓝图类继承自SurExplosiveBarrel,并给他分配一个网格体和材质。由于项目中没有红色火药桶的素材,于是换成了一个粉红色的圆柱体。

图6-1 创建蓝图类

        接下来把它拖拽进世界中,运行关卡并向它发射魔法粒子。可以发现角色和旁边的正方体(需要设置“模拟物理”打开)都被冲击波弹开了。

图6-2 运行结果

猜你喜欢

转载自blog.csdn.net/surkea/article/details/127120735