본 캠프 TIL

26.06.08 / 강의 챕터 1 정리, 3번 과제 완료

jh009 2026. 6. 8. 20:05

오늘

C++와 Unreal Engine으로 3D 게임 개발 챕터 1 정리 완료

https://jh009.tistory.com/49

 

C++와 Unreal Engine으로 3D 게임 개발 1-1

1-1. 언리얼 엔진 C++ 개발 환경 준비하기코드 편집기 설정 Unreal Engine 실행 후 Edit → Editor Preferences → General 쪽에서 Source CodeSource Code Editor 에 Visual Studio 버전이 맞는지 확인하기 Visual Studio 열기 Too

jh009.tistory.com

https://jh009.tistory.com/50

 

C++와 Unreal Engine으로 3D 게임 개발 1-2

1-2. 언리얼 엔진 C++ 빌드 프로세스 이해하기 Visual Studio → Solution Explorer 확인 Visual Studio 상에 보이는 파일 구조 → Solution 구조 Engine 폴더언리얼 엔진 자체 소스 코드와 리소스가 담긴 곳에디터

jh009.tistory.com

https://jh009.tistory.com/52

 

C++와 Unreal Engine으로 3D 게임 개발 1-3

1-3. C++ Actor 클래스 생성 및 삭제하기프로젝트에 리소스 MigrateResources 폴더 우클릭 → Migrate 선택 Migrate선택한 에셋 (또는 폴더) 이 참조하고 있는 모든 종속 파일을 함께 복사해줌 → 누락 없이 옮

jh009.tistory.com

https://jh009.tistory.com/53

 

C++와 Unreal Engine으로 3D 게임 개발 1-4

1-4. Actor 클래스에 컴포넌트 추가하기1. Actor 클래스 코드 구조 이해하기 .h 파일 상단 코드// 동일 헤더가 프로젝트 곳곳에서 여러 번 포함되더라도 컴파일러가 한 번만 처리#pragma once // 언리얼에

jh009.tistory.com

https://jh009.tistory.com/54

 

C++와 Unreal Engine으로 3D 게임 개발 1-5

1-5. 언리얼 엔진 Actor의 라이프 사이클 이해하기1. Actor 클래스에 로그 (Log) 추가하기 BeginPlay() 함수에 로그 추가하기 Item.h #pragma once#include "CoreMinimal.h"#include "GameFramework/Actor.h"#include "Item.generated.h"U

jh009.tistory.com

https://jh009.tistory.com/55

 

C++와 Unreal Engine으로 3D 게임 개발 1-6

1-6 : Tick 함수로 Actor의 Transform 조정하기1. Transform 속성 이해하기 Actor와 Transform 액터의 세 가지 속성 (Transform)- 뷰포트 상에서 x축 (빨간색), y축 (초록색), z축 (파란색)으로 표시 1. 위치(Location)- 액

jh009.tistory.com

https://jh009.tistory.com/56

 

C++와 Unreal Engine으로 3D 게임 개발 1-7

1-7. C++ 클래스와 리플렉션 시스템 활용하기1. 리플렉션 시스템 이해하기 Blueprint (시각적 스크립팅) 이해 장점즉각적인 테스트 가능초급자도 쉽게 접근할 수 있음단점노드 수가 많아지면 → 그래

jh009.tistory.com


[3번 과제] 회전발판과 움직이는 장애물

 

필수 기능 가이드


1. 퍼즐 오브젝트 설계

 

스테이지 테마를 중세시대 던전과 술집 느낌으로 설정


2. 서로 다른 Actor 클래스 2개 이상 구현

  • 각 StaticMeshComponent 포함 맵에 배치 가능한 형태
  • 두 클래스는 서로 다른 동작 로직(회전용 이동용 등) 수행

회전용 RotatingActor 와 이동용 MovingActor 로 총 두 클래스를 만들었음


3. Tick 함수 기반 동적 Transform 변경

 

회전 기능 (Rotating Actor)

  • Tick(float DeltaTime) 에서 AddActorLocalRotation()로 매 프레임 회전 적용

이동 기능 (Moving Platform Actor)

  • Tick(float DeltaTime) 에서 위치를 변경하여 왕복 이동 구현
  • StartLocation (시작 위치) 저장/기준점으로 사용
  • MoveSpeed (이동 속도) 적용
  • MaxRange (왕복 범위) 기준으로 이동 제한

프레임 독립성

  • 이동/회전 시 반드시 DeltaTime 을 활용

회전 기능 (Rotating Actor)

RotatingActor.h

 

RotatingActor.cpp


이동 기능 (Moving Platform Actor)

MovingActor.h

 

MovingActor.cpp


4. 리플렉션 적용

  • 주요 변수 (회전 속도, 이동 속도, 이동 범위 등)를 UPROPERTY로 선언하여 에디터에서 조정
  • EditAnywhere, BlueprintReadWrite, Category 등을 활용하여 Details 패널에서 편집 가능하게 만들기

언리얼 에디터와 블루프린트에서 둘 다 Details 패널에서 편집 가능하게 설정


5. 오브젝트 배치 및 테스트

  • 레벨에 제작한 회전 발판과 이동 플랫폼을 여러 개 배치
  • 각각 다른 속도, 이동범위, 회전값 적용 
  • 플레이 모드에서 오브젝트가 의도대로 움직이는지 확인 
  • 속도 변경이 실시간 반영되는지 확인

 

회전 기능 (Rotating Actor)

왼쪽부터 Rotation Speed를 각각 100, 300, 500 으로 설정

 

이동 기능 (Moving Platform Actor)

왼쪽 오브젝트

Move Speed: 300

Max Range: 500

 

오른쪽 오브젝트

Move Speed: 100

Max Range: 300

 

 

테스트까지 완료.


오늘의 핵심 키워드

배운내용 : 리플렉션 (Reflection)

- 언리얼 엔진의 UPROPERTY() 매크로를 사용하여 C++ 코드로 작성한 변수를 엔진 에디터에 노출하는 방법을 배웠다.

 

사용 이유

- C++ 클래스 내의 변수를 에디터(Details 패널)에서 즉각적으로 수정할 수 있게 만들기 위해서 쓴다.

 

어떻게 사용 했는지

- UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "...") 를 통해서 변수의 접근 권한을 설정했다.

- Category를 이용해 에디터 내에서 변수들을 폴더별로 깔끔하게 정리할 수 있었다.

 

사용 결과

- 코드 재컴파일 없이 에디터에서 MoveSpeed나 RotationSpeed 값을 변경하며 즉시 테스트할 수 있게 되어 작업 효율이 향상되었다.


배운 내용: 프레임 독립성 (Frame Independence)

- 프레임 속도에 상관없이 액터의 움직임을 일정하게 보장하는 DeltaTime의 개념과 활용법을 익혔다.

 

사용 이유

- DeltaTime 없이 단순히 매 프레임마다 값을 더하면, 사양이 좋은 컴퓨터에서는 너무 빨리 움직이고, 사양이 나쁜 컴퓨터에서는 너무 느리게 움직이는 문제가 발생한다.

 

어떻게 사용 했는지

- Tick(float DeltaTime) 함수에서 제공하는 DeltaTime 값을 이동/회전 연산에 곱해 주었다.

- 변화량 = 속도 * DeltaTime

- 매 프레임 발생하는 DeltaTime을 반영하여, 프레임이 낮을 때는 더 많이, 프레임이 높을 때는 더 적게 이동하도록 보정하였다.

 

사용 결과

- 하드웨어 성능과 관계없이 모든 환경에서 1초 당 이동 및 회전 거리가 동일해졌다.

- 의도한 속도로 일관된 게임 플레이 경험을 보장


회고

언리얼 C++을 공부하며 헷갈리는 부분이 많아 이해하는 데 꽤나 시간이 걸렸다.
리플렉션과 프레임 독립성 같은 핵심 원리를 직접 코드로 구현해보며 엔진이 어떻게 데이터를 관리, 동작하는지 조금은? 알 것 같다. 

과제 3번을 빠르게 완료하여 마감일까지 여유가 생겼다.

시간이 남은 만큼, 오늘 구현한 로직들이 엔진의 다른 부분과 어떻게 연결되는지 강의를 다시 수강하며 복습하는 데 쓸 예정이다.

특히 컴포넌트 관리나 블루프린트와의 연동 부분은 반복 학습이 필요하다.

 

진행 상황:

  • [과제 3번] 완료
  • [과제 4번] 미완료 (18일 마감)