[5번 과제] Unreal Engine 활용 프로그램 제작
MyActor.h
#pragma once
#include "CoreMinimal.h"
#include "GameFramework/Actor.h"
#include "MyActor.generated.h"
UCLASS()
class STUDY1_API AMyActor : public AActor
{
GENERATED_BODY()
public:
AMyActor();
protected:
virtual void BeginPlay() override;
public:
virtual void Tick(float DeltaTime) override;
void Move();
int32 Step();
float Distance(FVector2D first, FVector2D second);
int32 CreateEvent();
private:
FVector2D curPos;
float totDist;
int32 evCnt;
int32 stepCnt;
};
MyActor.cpp
#include "MyActor.h"
AMyActor::AMyActor()
{
PrimaryActorTick.bCanEverTick = true;
curPos = FVector2D(0, 0);
totDist = 0.0f;
evCnt = 0;
stepCnt = 0;
}
void AMyActor::BeginPlay()
{
Super::BeginPlay();
for (int i = 0; i < 10; ++i)
{
Move();
}
UE_LOG(LogTemp, Log, TEXT("Total Distance: %.2f"), totDist);
UE_LOG(LogTemp, Log, TEXT("Total Events: %d"), evCnt);
}
void AMyActor::Tick(float DeltaTime)
{
Super::Tick(DeltaTime);
}
// (0,0)부터 10회 움직이면서 좌표를 출력
void AMyActor::Move()
{
stepCnt++;
FVector2D prePos = curPos;
int stepX = Step();
int stepY = Step();
curPos.X += stepX;
curPos.Y += stepY;
float distance = Distance(prePos, curPos);
totDist += distance;
UE_LOG(LogTemp, Log, TEXT("Step %d: (%.0f, %.0f)"), stepCnt, curPos.X, curPos.Y);
UE_LOG(LogTemp, Log, TEXT("Moved distance: %.2f"), distance);
if (CreateEvent())
{
evCnt++;
UE_LOG(LogTemp, Log, TEXT("Event trigger!"));
}
}
// x좌표 y좌표 각각 이동할 거리
int32 AMyActor::Step()
{
return FMath::RandRange(0, 1);
}
// 이전 좌표기준 이동 거리
float AMyActor::Distance(FVector2D first, FVector2D second)
{
float dx = first.X - second.X;
float dy = first.Y - second.Y;
return FMath::Sqrt(dx * dx + dy * dy);
}
// 50% 확률로 랜덤하게 이벤트가 발생
int32 AMyActor::CreateEvent()
{
return FMath::RandRange(0, 1);
}
실행 결과
'내일배움캠프 > TIL' 카테고리의 다른 글
[내일배움캠프 Day18] 인라인 함수(inline function) (2) | 2025.01.10 |
---|---|
[내일배움캠프 Day17] C++ 빌드 과정 (1) | 2025.01.09 |
[내일배움캠프 Day15] 디자인 패턴 - 구조 패턴 (2) | 2025.01.09 |
[내일배움캠프 Day14] 디자인 패턴 - 생성 패턴 (1) | 2025.01.06 |
[내일배움캠프 Day13] C++ 2주차 과제 진행 (1) | 2025.01.03 |