728x90
반응형
이번엔 표준라이브러리 사용이 아닌 언리얼에서 간단한 c++프린트를 생성하여 코딩해보겠습니다.
구현 기능은 다음과 같습니다.
새로운 엑터를 생성하고 엑터가 spawn 되는 시점에 동작되도록 아래 요구사항대로 동작하도록 코드를 구현 합니다
시작점(0,0) 있는 게임 캐릭터가 랜덤하게 10회 이동 합니다. 각 스텝에서 거쳐간 좌표를 모두 출력하는게 목적입니다.
세부 요구사항은 아래와 같습니다.
- 시작점은 (0,0)이고 한번 이동시 x좌표와 y좌표 모두 2이상 이동할 수 없습니다. 예를 들면 아래와 같습니다.
- (0,0) 에서 (1,2)은 이동할수 없습니다. y좌표가 2이상 이동했기 때문입니다.
- (0,0)에서 (1,1)은 이동할 수 있습니다. x좌표 y좌표 모두 2미만 이동했기 때문 입니다.
- 이동은 입력을 받는게 아니고 10회 모두 랜덤으로 움직입니다.
- 매번 이동시 현재 좌표를 출력할 수 있어야 합니다.
- 로그 출력은 UE_LOG를 활용합니다.
- step 함수는 x좌표 y좌표 각각 이동할 거리 입니다.
- 예를들어서 현재 좌표가(x1,y1)이라면 다음 좌표는 (x1+step 함수의 리턴값,y1 + step함수의 리턴 값) 입니다.
- step함수는 0혹은 1을 랜덤으로 반환 합니다.
- move함수는 (0,0)부터 10회 움직이면서 좌표를 출력합니다. 이동시 step 함수가 활용 됩니다.
- 10회 이동시 각 스텝마다 이전 좌표기준 이동 거리를 계산해서 출력 합니다. 이동 거리는 아래와 같이 계산 합니다.
- 10회 이동시 각 스텝마다, 50% 확률로 랜덤하게 이벤트가 발생합니다.(발생 시키는 부분도 구현하셔야 합니다.) 각 스텝마다 이벤트 발생여부를 출력합니다.
- 10회 이동후에는 총 이동거리와 총 이벤트 발생횟수를 출력 합니다.
이를 구현한다면 아래와 같은 클래스가 될 것 입니다.(꼭 따라하실 필요는 없고 참고만 하세요)
구현 코드는 다음과 같습니다.
#include "MyActor.h"
#include "Math/UnrealMathUtility.h"
AMyActor::AMyActor()
{
// 초기화
start = FVector2D(0, 0);
evCnt = 0; // 이벤트 발생 횟수
totDist = 0; // 총 이동 거리
}
void AMyActor::BeginPlay()
{
Super::BeginPlay();
move();
UE_LOG(LogTemp, Warning, TEXT("총 이동 거리: %d"), totDist);
UE_LOG(LogTemp, Warning, TEXT("총 이벤트 발생 횟수: %d"), evCnt);
}
int32 AMyActor::step()
{
return FMath::RandRange(0, 1);
}
float AMyActor::distance(FVector2D first, FVector2D second)
{
return FVector2D::Distance(first, second);
}
int32 AMyActor::createEvent()
{
return FMath::RandRange(0, 1);
}
void AMyActor::move()
{
FVector2D CurrentPosition = start;
for (int i = 0; i < 10; ++i)
{
int32 StepX = step();
int32 StepY = step();
FVector2D NewPosition = CurrentPosition + FVector2D(StepX, StepY);
// 이동 거리 계산
float Dist = distance(CurrentPosition, NewPosition);
totDist += Dist; // 총 이동 거리 누적
// 이벤트 발생 여부
int32 EventOccurred = createEvent();
if (EventOccurred)
{
evCnt++;
}
UE_LOG(LogTemp, Warning, TEXT("Step %d: Current Position: (%f, %f), Distance: %f"),
i + 1, NewPosition.X, NewPosition.Y, Dist);
CurrentPosition = NewPosition;
}
}
솔루션 파일은 이렇게 구현하였으며 다음으로 헤더 파일입니다.
#pragma once
#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "MyActor.generated.h"
UCLASS()
class HELLO_API AMyActor : public AActor
{
GENERATED_BODY()
public:
// Sets default values for this actor's properties
AMyActor();
protected:
// Called when the game starts or when spawned
virtual void BeginPlay() override;
private:
// 이벤트 카운트
int32 evCnt;
// 총 이동 거리
int totDist;
// 시작 좌표
FVector2D start;
// 0 또는 1을 랜덤 반환
int32 step();
// 이동 함수
void move();
// 이벤트 생성
int32 createEvent();
//거리
float distance(FVector2D first, FVector2D second);
};
private 에 필요한 변수와 함수를 생성해줬습니다.
이때 코드에는 문제가 없어도 언리얼 엔진 최신버전을 사용하고 계시다면 정말 많은 에러가 발생하는 경우가 있습니다.
빌드는 성공할 순 있으나 보기 불편하신 분들을 위해 적자면
c디스크 - program files - epic games - UE_(사용버전) - engine 폴더를 우클릭 후 속성을 선택 후 일반으로 들어가 읽기전용을 체크해제 후 적용해주시면 오류가 대부분 해결됩니다.
728x90
반응형
'언리얼(Unreal) > 엔진' 카테고리의 다른 글
25.01.21 언리얼 Actor 클래스의 이해 (0) | 2025.01.21 |
---|---|
25.01.10 깃허브데스크탑 사용법 (0) | 2025.01.10 |
25.01.06 언리얼 cpp 디자인패턴 (0) | 2025.01.06 |
25.01.02 언리얼 cpp STL에 대하여 (0) | 2025.01.02 |
24.12.30 언리얼 cpp 자원관리(메모리관리) (0) | 2024.12.30 |