创建Character

271 阅读2分钟

总体思路

很简单,先创建一个C++的Character作为基类,然后再基于这个C++类创建BluePrint。然后在实际项目中,我们直接使用这个蓝图类即可,这样就既可以编码,也可以直接使用蓝图的比较简单的功能。

什么是Character

ACharacter 是APawn的子类,同时以A打头,说明它的老祖宗是AActor

Characters in Unreal Engine | Unreal Engine 5.3 Documentation

在文档中已经说明,它属于APawn的延申,我们可以把它直接理解为类人角色,毕竟它直接包含了可以绑定skeleton mesh的组件。

Character组件结构

基本步骤

  1. 创建C++ Character类,BlasterCharacter
  2. 基于BlasterCharacter 创建BP_BlasterChacter。注意将蓝图名和C++名区分开的同时保持一致。
  3. 绑定 skeleton
    • 点击 mesh 组件, 绑定上目标骨骼SK_...。然后将我们的人物正面和Arrow组件指向的方向对其。
    • 点击 Capsule 组件,我们查看它的高度,并以此对其我们的mesh。

image.png

image.png

添加CameraBoom和Camera

接下来,我们在我们的C++Charater中添加上CameraBoom和Camera两个类。CameraBoom相当于我们平常的照相机支架,它用来控制照相机和我们角色的距离。Camera的视口就是我们玩家的视口,对于我们第三人称的游戏,我们一般而言会把照相机固定在我们角色的后面,然后随着我们鼠标的移动,画面也会跟着移动。

下面是基本代码和注释。记得手动添加include

// BlasterCharacter.h
UPROPERTY(VisibleAnyWhere, Category= Camera)
class USpringArmComponent* CameraBoom;

UPROPERTY(VisibleAnyWhere, Category= Camera)
class UCameraComponent* FollowCamera;
// Sets default values
ABlasterCharacter::ABlasterCharacter()
{
	// Set this character to call Tick() every frame.  You can turn this off to improve performance if you don't need it.
	PrimaryActorTick.bCanEverTick = true;

	// create subcomponent USpringArmComponent and name it as CameraBoom
	// 其目的是让它本身的子组件和其父组件保持一定的距离
	CameraBoom = CreateDefaultSubobject<USpringArmComponent>(TEXT("CameraBoom"));
	// 将其固定到skeleton组件上
	CameraBoom->SetupAttachment(GetMesh());
	// 到父组件的距离设置为600
	CameraBoom->TargetArmLength = 600.f;
	// 跟随玩家的rotation
	CameraBoom->bUsePawnControlRotation = true;

	FollowCamera = CreateDefaultSubobject<UCameraComponent>(TEXT("FollowCamera"));
	// 成为CameraBoom的子组件
	FollowCamera->SetupAttachment(CameraBoom, USpringArmComponent::SocketName);
	// 直接跟随CameraBoom即可
	FollowCamera->bUsePawnControlRotation = false;
}

添加完毕后,在蓝图中调整CameraBoom的位置到自己喜欢的视角。

最后效果

image.png