UE4的第一人称模板做了什么
我们的UE4为我们提供第一人称模板来让我们进行学习和二次开发,现在我们来看一下第一人称模板都做了什么。我们在新建第一人称模板的时候可以看到UE4官方对第一人称模板的解释,如下图:

不难看出,我们主要使用了Character来作为我们的主角,用了HUD显示我们的UI(准星)还运用了Actor的内容(生产发射物)
新建打开我们的第一人称项目,在这里我命名为FirstProject,打开我们的Visual Studio工程,打开我们的FirstProjectCharacter,这个就是我们的主角,而移动,视野,跳跃相关内容我们不再重复介绍,与第三人称模板大同小异。我们来看在FirstProjectCharacter.h中为我们定义了什么组件。
// 摄像机组件
UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = Camera, meta = (AllowPrivateAccess = "true"))
class UCameraComponent* FirstPersonCameraComponent;
// 人物模型组件
UPROPERTY(VisibleDefaultsOnly, Category=Mesh)
class USkeletalMeshComponent* Mesh1P;
// 枪模型组件
UPROPERTY(VisibleDefaultsOnly, Category = Mesh)
class USkeletalMeshComponent* FP_Gun;
// 相对于空组件,放在枪管位置,用于生成子弹
UPROPERTY(VisibleDefaultsOnly, Category = Mesh)
class USceneComponent* FP_MuzzleLocation;
// 移动跳跃视野转动相关内容省略......
// 子弹生成位置的偏移量
UPROPERTY(EditAnywhere, BlueprintReadWrite, Category=Gameplay)
FVector GunOffset;
在FristProjectCharacter.cpp中的构造函数下
AFirstProjectCharacter::AFirstProjectCharacter(){
// 设置胶囊体的大小
GetCapsuleComponent()->InitCapsuleSize(55.f, 96.0f);
// 设置视野移动相关参数(详见第三人称模板的视野移动相关内容)
BaseTurnRate = 45.f;
BaseLookUpRate = 45.f;
// 实例化摄像机
FirstPersonCameraComponent = CreateDefaultSubobject<UCameraComponent>(TEXT("FirstPersonCamera"));
// 绑定在胶囊体组件下
FirstPersonCameraComponent->SetupAttachment(GetCapsuleComponent());
// 位置偏移
FirstPersonCameraComponent->SetRelativeLocation(FVector(-39.56f, 1.75f, 64.f));
// 允许摄像机与Controller旋转
FirstPersonCameraComponent->bUsePawnControlRotation = true;
// 设置模型
Mesh1P = CreateDefaultSubobject<USkeletalMeshComponent>(TEXT("CharacterMesh1P"));
// 设置模型显示
Mesh1P->SetOnlyOwnerSee(true);
// 绑定在摄像机下
Mesh1P->SetupAttachment(FirstPersonCameraComponent);
// 不产生阴影
Mesh1P->bCastDynamicShadow = false;
// 不投射阴影上去
Mesh1P->CastShadow = false;
// 位置和旋转属性的设置
Mesh1P->SetRelativeRotation(FRotator(1.9f, -19.19f, 5.2f));
Mesh1P->SetRelativeLocation(FVector(-0.5f, -4.4f, -155.7f));
// 设置枪模型
FP_Gun = CreateDefaultSubobject<USkeletalMeshComponent>(TEXT("FP_Gun"));
FP_Gun->SetOnlyOwnerSee(true);
FP_Gun->bCastDynamicShadow = false;
FP_Gun->CastShadow = false;
// 绑定在根组件下
FP_Gun->SetupAttachment(RootComponent);
// 实例化枪管发射标识组件
FP_MuzzleLocation = CreateDefaultSubobject<USceneComponent>(TEXT("MuzzleLocation"));
// 放在枪模型组件下
FP_MuzzleLocation->SetupAttachment(FP_Gun);
// 将这个组件移动到枪管位置
FP_MuzzleLocation->SetRelativeLocation(FVector(0.2f, 48.4f, -10.6f));
// 设置发射物的偏移量
GunOffset = FVector(100.0f, 0.0f, 10.0f);
}
我们看到,他的大致思路是有一个角色的模型,枪的模型,在枪的模型下实例化一个虚的组件,在这个组件的位置生成子弹。