Player Input and Pawns 1 часть

By | November 19, 2015

Настройка Pawn(Customize a Pawn

Серия уроков по программированию на unreal 4.

Данный урок должен дать общее представление о настройке объектов и игроке.

1) Первоначально мы создадим новый проект с базовым кодом на С++ . После мы добавим кастомизированный класс через визард и назовём его MyPawn.

Pawn – является типом актёра которым управляет игрок

AddPawn

NameYourNewPawn

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);

}

 

Продолжение урока по ссылке

 

Category: Uncategorized