1. 自定义Pawn

Pawn介绍

Windows
MacOS
Linux
On this page

刚开始了解 虚幻引擎4 时,建议先阅读编程快速入门 教程 。阅读此教程之前应先熟悉创建项目、添加C++代码和编译代码的操作。

  1. 首先我们将新建一个含初学者内容包的基础代码项目,命名为HowTo_PlayerInput。然后再将一个自定义 Pawn 类添加到项目(我们称之为MyPawn)。

    Pawn是一种由真人玩家或AI所控制的 Actor

    AddPawn.png

    NameYourNewPawn.png

  2. 首先需要设置MyPawn在游戏开始时自动响应玩家输入。Pawn类提供一个可在初始化中设置的变量,其将进行处理。在MyPawn.cpp中将以下代码添加到 AMyPawn::AMyPawn

    // 将此pawn设为受最低数字的玩家控制
    AutoPossessPlayer = EAutoReceiveInput::Player0;
  3. 接下来我们将构建几个基础 组件。如需了解在代码中添加和管理组件的更多内容,以及会遇到的部分常见组件类型,请阅读组件和碰撞 教程 。为对将要创建的组件进行追踪,应将以下代码添加到类定义底部的MyPawn.h:

    UPROPERTY(EditAnywhere)
    USceneComponent* OurVisibleComponent;

    此变量被标记为一个 UPROPERTY,因此其可为 虚幻引擎 所见。这十分重要,因为它能防止游戏启动时(或项目/关卡被关闭并重加载时)变量被重置。

    再回到MyPawn.cpp,我们需要将以下代码添加到AMyPawn::AMyPawn:

    // 创建一个可附加内容的虚拟根组件。
    RootComponent = CreateDefaultSubobject<USceneComponent>(TEXT("RootComponent"));
    // 创建一个相机和一个可见物
    UCameraComponent* OurCamera = CreateDefaultSubobject<UCameraComponent>(TEXT("OurCamera"));
    OurVisibleComponent = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("OurVisibleComponent"));
    // 将相机和可见物附加到根组件。偏移并旋转相机。
    OurCamera->SetupAttachment(RootComponent);
    OurCamera->SetRelativeLocation(FVector(-250.0f, 0.0f, 250.0f));
    OurCamera->SetRelativeRotation(FRotator(-45.0f, 0.0f, 0.0f));
    OurVisibleComponent->SetupAttachment(RootComponent);
  4. 现在即可保存修改,用 Visual Studio 中的 编译(Build) 命令或 虚幻编辑器 中的 编译(Compile) 按钮进行编译。


设置好相应游戏输入的自定义Pawn后,则需要对输入进行定义。执行方法是在 虚幻编辑器 中配置项目的 输入设置

编写中代码

MyPawn.h

// Copyright 1998-2018 Epic Games, Inc. All Rights Reserved.

#pragma once

#include "GameFramework/Pawn.h"
#include "MyPawn.generated.h"

UCLASS()
class HOWTO_PLAYERINPUT_API AMyPawn : public APawn
{
    GENERATED_BODY()

public:
    // 设置默认值
    AMyPawn();

protected:
    // 游戏开始时或生成时调用
    virtual void BeginPlay() override;

public:
    // 每帧调用
    virtual void Tick( float DeltaSeconds ) override;

    // 调用后将功能绑定到输入
    virtual void SetupPlayerInputComponent(class UInputComponent* InputComponent) override;

    UPROPERTY(EditAnywhere)
    USceneComponent* OurVisibleComponent;
};

MyPawn.cpp

// Copyright 1998-2018 Epic Games, Inc. All Rights Reserved.

#include "HowTo_PlayerInput.h"
#include "MyPawn.h"

// 设置默认值
AMyPawn::AMyPawn()
{
    // 设置此pawn在每帧调用Tick()。如果不需要,则可将其关闭来改善性能。
    PrimaryActorTick.bCanEverTick = true;

    // 将此pawn设为受最低数字的玩家控制
    AutoPossessPlayer = EAutoReceiveInput::Player0;

    // 创建一个可附加内容的虚拟根组件。
    RootComponent = CreateDefaultSubobject<USceneComponent>(TEXT("RootComponent"));
    // 创建一个相机和一个可见物
    UCameraComponent* OurCamera = CreateDefaultSubobject<UCameraComponent>(TEXT("OurCamera"));
    OurVisibleComponent = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("OurVisibleComponent"));
    // 将相机和可见物附加到根组件。偏移并旋转相机。
    OurCamera->SetupAttachment(RootComponent);
    OurCamera->SetRelativeLocation(FVector(-250.0f, 0.0f, 250.0f));
    OurCamera->SetRelativeRotation(FRotator(-45.0f, 0.0f, 0.0f));
    OurVisibleComponent->SetupAttachment(RootComponent);
}

// 游戏开始时或生成时调用
void AMyPawn::BeginPlay()
{
    Super::BeginPlay();

}

// 每帧调用
void AMyPawn::Tick( float DeltaTime )
{
    Super::Tick( DeltaTime );

}

// 调用后将功能绑定到输入
void AMyPawn::SetupPlayerInputComponent(class UInputComponent* InputComponent)
{
    Super::SetupPlayerInputComponent(InputComponent);

}
Select Skin
Light
Dark

Welcome to the new Unreal Engine 4 Documentation site!

We're working on lots of new features including a feedback system so you can tell us how we are doing. It's not quite ready for use in the wild yet, so head over to the Documentation Feedback forum to tell us about this page or call out any issues you are encountering in the meantime.

We'll be sure to let you know when the new system is up and running.

Post Feedback