从 C++ 派生蓝图类
这一节我们继续完善 Pawn 基础类。我们按图 1 中的结构实现。

如代码清单 1 所示,我们创建底座 Mesh,并将其设置为碰撞体的子节点;创建炮塔 Mesh,并将其设置为底座 Mesh 的子节点;创建发射点位置,并将其设置为炮塔 Mesh 的子节点。
- // Sets default values
- ABasePawn::ABasePawn()
- {
- // Set this pawn to call Tick() every frame. You can turn this off to improve performance if you don't need it.
- PrimaryActorTick.bCanEverTick = true;
- CapsuleComp = CreateDefaultSubobject<UCapsuleComponent>(TEXT("Capsule Collider"));
- RootComponent = CapsuleComp;
- BaseMesh = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("Base Mesh"));
- BaseMesh->SetupAttachment(CapsuleComp);
- TurretMesh = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("Turret Mesh"));
- TurretMesh->SetupAttachment(BaseMesh);
- ProjectileSpawnPoint = CreateDefaultSubobject<USceneComponent>(TEXT("Spawn Point"));
- ProjectileSpawnPoint->SetupAttachment(TurretMesh);
- }
USceneComponent 是所有支持 Attach 的组件的基类。它拥有位置、旋转和缩放信息。
实现好后,我们回到编辑器。如图 2 所示,我们找到实现的 BasePawn C++ 类,右击选择“创建基于BasePawn的蓝图类”。此处我们创建两个蓝图类,一个是 BP_PawnTank,用于玩家操纵的坦克;一个是 BP_PawnTurret,用于敌人炮塔。

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