Настройка Pawn(Customize a Pawn
Серия уроков по программированию на unreal 4.
Данный урок должен дать общее представление о настройке объектов и игроке.
1) Первоначально мы создадим новый проект с базовым кодом на С++ . После мы добавим кастомизированный класс через визард и назовём его MyPawn.
Pawn – является типом актёра которым управляет игрок
2) Во первых мы научим наш MyPawn автоматически реагировать при входе нашего игрока в игру. Pawn класс обеспечивает нас переменные которые инициализируются для нас. В MyPawn.cpp добавляем следующий код в участок AMyPawn::AMyPawn (Это контролёр нашего класса)
// Установим в pawn контролёр игрока с наименьшим числом AutoPossessPlayer = EAutoReceiveInput::Player0;
3) Далее мы создадим несколько базовых компонентов. Если вы хотите почитать побольше о добавлении и управлении компонентами в коде, то вам необходимо почитать руководство по компонентам и коллизиям в unreal engine .Чтобы отслеживать компоненты, необходимо добавить в следующий код нашего класса следующий класс для определения.
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->AttachTo(RootComponent);
OurCamera->SetRelativeLocation(FVector(-250.0f, 0.0f, 250.0f));
OurCamera->SetRelativeRotation(FRotator(-45.0f, 0.0f, 0.0f));
OurVisibleComponent->AttachTo(RootComponent);
4) Теперь у нас всё настроено и Pawn реагирует на вход игрока при входе в игру. Теперь мы должны определить что будет у нас входом. Чтобы сделать вход, мы должны настроить наш проект в Unreal Engine.
MyPawn.h
// Copyright 1998-2015 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:
// Sets default values
AMyPawn();
// Called when the game starts or when spawned
virtual void BeginPlay() override;
// Called every frame
virtual void Tick( float DeltaSeconds ) override;
// Called to bind functionality to input
virtual void SetupPlayerInputComponent(class UInputComponent* InputComponent) override;
UPROPERTY(EditAnywhere)
USceneComponent* OurVisibleComponent;
};
MyPawn.cpp
// Copyright 1998-2015 Epic Games, Inc. All Rights Reserved.
#include "HowTo_PlayerInput.h"
#include "MyPawn.h"
// Sets default values
AMyPawn::AMyPawn()
{
// Set this pawn to call Tick() every frame.
// Эту опцию можно отключить, если нет в ней необходимости
// Это даст прирост производительности
PrimaryActorTick.bCanEverTick = true;
// Set this pawn to be controlled by the lowest-numbered player
AutoPossessPlayer = EAutoReceiveInput::Player0;
// Создаём корневой элемент куда добавим новый объект
RootComponent = CreateDefaultSubobject<USceneComponent>(TEXT("RootComponent"));
// Создаём камеру и видимый объект
UCameraComponent* OurCamera = CreateDefaultSubobject<UCameraComponent>(TEXT("OurCamera"));
OurVisibleComponent = CreateDefaultSubobject<UStaticMeshComponent>(TEXT("OurVisibleComponent"));
// Прикрепляем нашу камеру к корневому объекту
// Устанавливаем вмещение и вращение камеры
OurCamera->AttachTo(RootComponent);
OurCamera->SetRelativeLocation(FVector(-250.0f, 0.0f, 250.0f));
OurCamera->SetRelativeRotation(FRotator(-45.0f, 0.0f, 0.0f));
OurVisibleComponent->AttachTo(RootComponent);
}
// Вызывается при старте игры или при продолжении
void AMyPawn::BeginPlay()
{
Super::BeginPlay();
}
// Вызывается каждый кадр
void AMyPawn::Tick( float DeltaTime )
{
Super::Tick( DeltaTime );
}
// Вызывается, чтобы связать функциональность для ввода
void AMyPawn::SetupPlayerInputComponent(class UInputComponent* InputComponent)
{
Super::SetupPlayerInputComponent(InputComponent);
}
Продолжение урока по ссылке

