Zack.Zhang Game Developer

UE4学习笔记1——Actor、Pawn

2021-10-03
zack.zhang

第一个示例目的是创建UE工程,创建一个Actor和Pawn。Actor能移动,能使用物理。Pawn能设置替换游戏的默认控制器,控制相机移动和旋转。入门示例成品

创建工程

工程目录:

1.1

  • Binaries:游戏编译的二进制文件(dll等)

  • Config:游戏的项目设置、世界场景设置等设置项,也就是这个按钮下的设置内容。UE4-Settings.png

  • Content:游戏资源目录,蓝图、模型、材质等。Content/Collections和Content/Developers是临时文件。

  • DerivedDataCache:

  • Intermediate:生成的中间文件。

  • Saved:自动保存的文件,日志、自动备份文件等。

  • *.sln:C++工程文件。

  • *.uproject:Engine工程文件。

创建Actor

右键创建Actor类。

UE4-CreateActor1.png

选择父类:Actor。

UE4-CreateActor2.png

命名为MyActor。代码如下。

UCLASS()
class TEST1_API AMyActor : public AActor
{
	GENERATED_BODY()
	
public:	
	UPROPERTY(VisibleAnywhere, Category = "My Actor Components")
	UStaticMeshComponent* MyStaticMesh;

	// Sets default values for this actor's properties
	AMyActor();

protected:
	// Called when the game starts or when spawned
	virtual void BeginPlay() override;

public:	
	// Called every frame
	virtual void Tick(float DeltaTime) override;

};

UE类都要加上UCLASS()的标签,以及GENERATED_BODY()这个定义块。这个类里自定义了一个UStaticMeshComponent类型的组件,它是一个静态网格模型。

创建静态网格模型组件代码如下:

AMyActor::AMyActor()
{
	PrimaryActorTick.bCanEverTick = true;
	
	// 创建UStaticMeshComponent,TEXT("MyStaticMesh")这个字符串没实际用处,只有在报错调试时候可以看到。
	MyStaticMesh = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("MyStaticMesh"));
}

创建好C++类,点击编译,在“内容浏览器”中显示如下。

UE4-CreateActor3.png

创建MyActor的蓝图类,在蓝图类里就可以编辑这个类实例出来的物体了。

UE4-CreateActor4.png

蓝图类我们统一放到新建的目录Content/Blueprints文件夹下,如下图所示。

UE4-CreateActor5.png

双击蓝图类进行编辑,赋一个Sphere给刚才创建的UStaticMeshComponent。

UE4-CreateActor6.png

将蓝图类拖入场景中,实例化一个对象出来。

UE4-CreateActor7.png

如果要让球运动,可以在Tick函数里加如下代码。

void AMyActor::Tick(float DeltaTime)
{
	Super::Tick(DeltaTime);

	// 沿着X轴移动。
	AddActorLocalOffset(FVector(200.0f, 0.0f, 0.0f) * DeltaTime);
}

创建Pawn

Pawn是傀儡的意思,也就是玩家可以操控的对象。其与Actor大体相同,只是多了一个默认函数用来处理玩家输入,代码如下。

virtual void SetupPlayerInputComponent(class UInputComponent* PlayerInputComponent) override;

创建的过程同创建Actor,只是继承的C++父类改成Pawn,类名命名为AMyPawn,并创建UCameraComponent组件。具体代码看“入门示例成品”。

设置“输入”。点击“设置 > 项目设置……”

UE4-CreatePawn1.png

点击“输入”选项。

UE4-CreatePawn2.png

添加轴输入(“操作映射”指的是一次性的响应事件,比如点击某个按钮;“轴映射”指的是连续性的响应事件,比如按下某个键的过程中的事件处理)。这里我们设置了按下W、A、S、D和鼠标左右滑动、上下滑动的映射。

UE4-CreatePawn3.png

在AMyPawn类里加上响应函数。

void MoveForwardBack(float Value);

void MoveLeftRight(float Value);

void MouseX(float Value);

void MouseY(float Value);

在SetupPlayerInputComponent里绑定“轴映射”的响应函数。

void AMyPawn::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent)
{
	Super::SetupPlayerInputComponent(PlayerInputComponent);

	PlayerInputComponent->BindAxis(TEXT("MoveFrontBack"), this, &AMyPawn::MoveForwardBack);
	PlayerInputComponent->BindAxis(TEXT("MoveLeftRight"), this, &AMyPawn::MoveLeftRight);
	PlayerInputComponent->BindAxis(TEXT("MouseX"), this, &AMyPawn::MouseX);
	PlayerInputComponent->BindAxis(TEXT("MouseY"), this, &AMyPawn::MouseY);
}

创建蓝图类BP_MyPawn,并将其拖入到场景中。

发现问题:将Pawn蓝图类拖入场景,点击运行并不能操作我们的UCameraComponent。

设置默认Pawn

右键点击默认的游戏模式,创建蓝图类BP_MyTest1GameMode,如下图。

UE4-SetDefaultPawn1.png

双击创建出来的蓝图类,并编辑“默认pawn类”为刚才创建的AMyPawn类对应的蓝图类。

UE4-SetDefaultPawn2.png

选择默认的游戏模式为刚才创建的BP_MyTest1GameMode。

UE4-SetDefaultPawn3.png


Similar Posts

评论