Настройка 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); }
Продолжение урока по ссылке