[24.01.15] - C++Class

손지·2024년 1월 25일
0

Unreal

목록 보기
13/43
post-thumbnail

프로그래밍 파트 회의결과 최고의 퍼포먼스를 위하여 기존의 블루 프린트 에서 C++로 프로젝트를 변경하려고 한다.

그 첫번째로 Enemy 를 만들고

적이 캐릭터를 추적하는 로직을 만들어 보았다.

우선 C++클래스를 생성하고 .

Enemy.h 라는 헤더파일.

#pragma once

#include "CoreMinimal.h"
#include "GameFramework/Character.h"
#include "Enemy.generated.h"

UCLASS()
class PROJECTDECIDE_API AEnemy : public ACharacter
{
	GENERATED_BODY()

public:
	//캐릭터 속성의 기본값을 설정.
	AEnemy();

protected:
	// 게임이 시작되거나 스폰될 때 호출.
	virtual void BeginPlay() override;

public:	
	// 매 프레임마다 호출됨.
	virtual void Tick(float DeltaTime) override;

private:
	//플레이어를 추적하는 함수.
	void FollowPlayer(float DeltaTime);

	//추적 속도
	UPROPERTY(EditAnywhere, Category = "Enemy")
	float speed = 1.0f;

	//플레이어 컨트롤러
	APlayerController* PlayerController;

	//플레이어를 추적 중인지 여부
	bool bIsFollowingPlayer;
};

Enemy.cpp 파일

// Fill out your copyright notice in the Description page of Project Settings.

#include "Enemy.h"
#include "GameFramework/PlayerController.h"
#include "GameFramework/Character.h"
#include "Kismet/GameplayStatics.h"

// 기본값 설정
AEnemy::AEnemy()
{
 	// 매 프레임마다 Tick()을 호출하도록 이 문자를 설정합니다. 필요하지 않은 경우 이 기능을 꺼서 성능을 향상시킬 수 있음.
	PrimaryActorTick.bCanEverTick = true;

}

// 게임이 시작되거나 스폰이 될 때 호출
void AEnemy::BeginPlay()
{
	Super::BeginPlay();
	
	//플레이어의 컨트롤러를 찾기(위치값 받아오는 용도)
	PlayerController = UGameplayStatics::GetPlayerController(GetWorld(), 0);
	
}

//매 프레임마다 호출
void AEnemy::Tick(float DeltaTime)
{
	Super::Tick(DeltaTime);
	FollowPlayer(DeltaTime);
}

//플레어를 추적하는 함수
void AEnemy::FollowPlayer(float DeltaTime)
{
	if(PlayerController)
	{
		//플레이어 캐릭터 가져오기
		ACharacter* PlayerCharacter = UGameplayStatics::GetPlayerCharacter(GetWorld(), 0);
		//플레이어 캐릭터가 유효한지 확인
		if(PlayerCharacter)
		{
			//플레이어의 위치 가져오기
			FVector PlayerLocation = PlayerCharacter -> GetActorLocation();

			//플레이어의 위치로 부드럽게 이동
			FVector NewLocation = FMath::VInterpTo(GetActorLocation(),PlayerLocation, DeltaTime, speed);
			SetActorLocation(NewLocation);

		}
	}
}

위와 같이 만들면 우선 플레이어를 따라오는 코드는 만들었다. 이제 적을 스폰 하는 스포너를 만들어보자.

profile
언리얼 개발자가 될사람

0개의 댓글