UE4的第三人称模板做了什么


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


  不难看出,我们主要使用了Character来作为我们的主角,那么这一节将会记录Character的一些设置。

  新建打开我们的第三人称项目,在这里我命名为ThirdProject,打开我们的Visual Studio工程,打开我们的ThirdProjectCharacter,这个就是我们的主角,我们来看在ThirdProjectCharacter.h中为我们定义了什么组件。


    // 摄像机手臂组件
	UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = Camera, meta = (AllowPrivateAccess = "true"))
        class USpringArmComponent* CameraBoom;
    // 摄像机组件
    UPROPERTY(VisibleAnywhere, BlueprintReadOnly, Category = Camera, meta = (AllowPrivateAccess = "true"))
        class UCameraComponent* FollowCamera;
						

  由于Character这个类已经为我们定义了一个胶囊体组件作为根组件,其下有一个骨骼模型组件,方向箭头组件,所以有些基础的东西不需要我们继续定义,我们来看看在ThirdProjectCharacter.cpp中的构造函数下为我们实例化了什么。


    // 设置胶囊体的大小,使其适配我们的模型
    GetCapsuleComponent()->InitCapsuleSize(42.f, 96.0f);
    
    // 实例化摄像机手臂
    CameraBoom = CreateDefaultSubobject<USpringArmComponent>(TEXT("CameraBoom"));
    // 将摄像机手臂绑定在根组件上
    CameraBoom->SetupAttachment(RootComponent);
    // 摄像机手臂的长度
    CameraBoom->TargetArmLength = 300.0f;
    // 这里使用Controller的旋转来控制镜头旋转,与之前的简单旋转逻辑不一样,这里允许摄像机手臂跟随Controller旋转
    CameraBoom->bUsePawnControlRotation = true;
	
    // 实例化摄像机
    FollowCamera = CreateDefaultSubobject<UCameraComponent>(TEXT("FollowCamera"));
    // 将摄像机绑定在摄像机手臂上
    FollowCamera->SetupAttachment(CameraBoom, USpringArmComponent::SocketName);
    // 由于摄像机手臂已经跟随Controller旋转,所以摄像机是没有必要跟随旋转的
    FollowCamera->bUsePawnControlRotation = false;
						

  我们看到,这样子我们就实例化了一个Character,并且实例化了一些组件,且这些组件我们都很熟悉,但是我们又发现,他的摄像机和摄像机手臂是跟随Controller旋转的而不是我们的角色,这是另外一种思路,因为我们的Character并不是我们直接控制的,而是通过Controller这个控制器作为中介,将我们的硬件输入传入Character中,再进行对应的操作,所以说,我们可以想象为,Character是我们的身体,用于做出各种的动作,而Controller是我们的大脑,用于发出各种的指令并控制我们的身体。而在我们没有指定Controller的时候,UE4会自动为我们指定一个默认的Controller,而我们的第三人称模板使用的就是默认的Controller,因为只有简单的移动和跳跃等逻辑,没有复杂的操作,所以默认的Controller即可胜任,我们无需另外创建。