

Bird.h
#pragma once #include "CoreMinimal.h" #include "GameFramework/Pawn.h" #include "Bird.generated.h" UCLASS() class TEST_API ABird : public APawn { GENERATED_BODY() public: ABird(); virtual void Tick(float DeltaTime) override; virtual void SetupPlayerInputComponent(class UInputComponent* PlayerInputComponent) override; protected: virtual void BeginPlay() override; void MoveForward(float Value); void Turn(float Value); void LookUp(float Value); private: UPROPERTY(VisibleAnywhere) class UCapsuleComponent* Capsule; UPROPERTY(VisibleAnywhere) class USkeletalMeshComponent* BirdMesh; UPROPERTY(VisibleAnywhere) class USpringArmComponent* CameraBoom; UPROPERTY(VisibleAnywhere) class UCameraComponent* FollowCamera; };
Bird.cpp
#include "Test/Public/Pawns/Bird.h" #include "Components/CapsuleComponent.h" #include "Components/SkeletalMeshComponent.h" #include "GameFramework/SpringArmComponent.h" #include "Camera/CameraComponent.h" ABird::ABird() { PrimaryActorTick.bCanEverTick = true; Capsule = CreateDefaultSubobject<UCapsuleComponent>(TEXT("Capsule")); RootComponent = Capsule; Capsule->SetCapsuleHalfHeight(20.f); Capsule->SetCapsuleRadius(15.f); BirdMesh = CreateDefaultSubobject<USkeletalMeshComponent>(TEXT("BirdMesh")); BirdMesh->SetupAttachment(Capsule); CameraBoom = CreateDefaultSubobject<USpringArmComponent>(TEXT("CameraBoom")); CameraBoom->SetupAttachment(Capsule); CameraBoom->TargetArmLength = 300.f; FollowCamera = CreateDefaultSubobject<UCameraComponent>(TEXT("FollowCamera")); FollowCamera->SetupAttachment(CameraBoom); AutoPossessPlayer = EAutoReceiveInput::Player0; bUseControllerRotationPitch = true; bUseControllerRotationYaw = true; } void ABird::BeginPlay() { Super::BeginPlay(); } void ABird::MoveForward(float Value) { if (Controller && (Value != 0.f)) { FVector Forward = GetActorForwardVector(); AddMovementInput(Forward, Value); } } void ABird::Turn(float Value) { AddControllerYawInput(Value); } void ABird::LookUp(float Value) { AddControllerPitchInput(Value); } void ABird::Tick(float DeltaTime) { Super::Tick(DeltaTime); } // Called to bind functionality to input void ABird::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent) { Super::SetupPlayerInputComponent(PlayerInputComponent); PlayerInputComponent->BindAxis("MoveForward", this, &ABird::MoveForward); PlayerInputComponent->BindAxis("Turn", this, &ABird::Turn); PlayerInputComponent->BindAxis("LookUp", this, &ABird::LookUp); }