从 C++ 派生蓝图类

这一节我们继续完善 Pawn 基础类。我们按图 1 中的结构实现。

图1 结构

如代码清单 1 所示,我们创建底座 Mesh,并将其设置为碰撞体的子节点;创建炮塔 Mesh,并将其设置为底座 Mesh 的子节点;创建发射点位置,并将其设置为炮塔 Mesh 的子节点。

代码清单 1 结构
  1. // Sets default values
  2. ABasePawn::ABasePawn()
  3. {
  4.     // Set this pawn to call Tick() every frame.  You can turn this off to improve performance if you don't need it.
  5.     PrimaryActorTick.bCanEverTick = true;
  6.  
  7.     CapsuleComp = CreateDefaultSubobject<UCapsuleComponent>(TEXT("Capsule Collider"));
  8.     RootComponent = CapsuleComp;
  9.  
  10.     BaseMesh = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("Base Mesh"));
  11.     BaseMesh->SetupAttachment(CapsuleComp);
  12.  
  13.     TurretMesh = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("Turret Mesh"));
  14.     TurretMesh->SetupAttachment(BaseMesh);
  15.  
  16.     ProjectileSpawnPoint = CreateDefaultSubobject<USceneComponent>(TEXT("Spawn Point"));
  17.     ProjectileSpawnPoint->SetupAttachment(TurretMesh);
  18. }

USceneComponent 是所有支持 Attach 的组件的基类。它拥有位置、旋转和缩放信息。

实现好后,我们回到编辑器。如图 2 所示,我们找到实现的 BasePawn C++ 类,右击选择“创建基于BasePawn的蓝图类”。此处我们创建两个蓝图类,一个是 BP_PawnTank,用于玩家操纵的坦克;一个是 BP_PawnTurret,用于敌人炮塔。

图2 派生蓝图

在图 2 中能看到创建的蓝图类。左上角可以看到对应的场景结构,正是我们在 C++ 中创建的名称和层次结构。