2026/04 24

C++ 클래스, 메모리, 그리고 참조 시스템

1. 포인터(Pointer) vs 레퍼런스(Reference)클래스 객체를 가리키거나 전달할 때 사용하는 두 가지 방식입니다.포인터 (Battery* ptr):개념: 객체의 '메모리 주소'를 저장하는 변수입니다.특징: nullptr을 가질 수 있고, 나중에 다른 객체를 가리키도록 바꿀 수 있습니다.접근: 화살표 연산자(->)를 사용하여 멤버에 접근합니다. (예: ptr->useBattery())레퍼런스 (Battery& ref):개념: 기존 객체에 붙이는 '별명(Alias)'입니다.특징: 선언과 동시에 반드시 초기화해야 하며, 한 번 정해지면 죽을 때까지 그 객체만 가리킵니다.접근: 일반 객체처럼 점(.) 연산자를 사용합니다. (예: ref.useBattery())2. 클래스와 포인터/레퍼런스의 결합동적..

TIL 2026.04.30

[TIL] C++ 클래스 기초: 캡슐화와 객체 간 상호작용 (feat. 언리얼 엔진 대비)

오늘 C++의 핵심인 클래스(Class)를 공부하며, 단순한 문법을 넘어 객체지향 설계의 기초를 다졌습니다. 특히 실무(언리얼 엔진)에서 쓰이는 데미지 시스템 로직을 직접 구현해 본 과정이 인상적이었습니다.1. 클래스의 핵심 개념캡슐화(Encapsulation): 데이터를 private 영역에 숨겨 외부의 직접적인 접근을 차단하고, 반드시 public 함수(Getter/Setter)를 통해서만 데이터를 조작하도록 설계했습니다. 이는 데이터의 오염을 막고 유지보수성을 높이는 핵심입니다.생성자와 초기화 리스트: 객체가 생성될 때 멤버 변수를 초기화하는 효율적인 방법을 익혔습니다. 특히 초기화 리스트는 대입 연산보다 성능 면에서 우수하며, 멤버 변수 간의 초기화 순서가 중요하다는 점을 배웠습니다.2. 객체 간..

TIL 2026.04.29

[UE5] 언리얼 C++: 좌표 이동과 확률 시스템 구현하기

📝 오늘 요약:언리얼 C++의 기본 구조를 이해하고, 1초마다 무작위로 이동하며 거리를 누적하는 액터를 구현했다.1. 언리얼 C++의 설계도와 실행부 (.h vs .cpp)C++ 코딩의 시작은 "설계"와 "실행"을 나누는 것부터 시작된다.헤더 파일(.h): 클래스의 설계도다. "우리 클래스는 어떤 변수(기억 상자)를 가지고, 어떤 함수(기능)를 쓸 것인가?"를 미리 선언한다.소스 파일(.cpp): 설계도에 적힌 기능을 실제로 구현하는 곳이다. ::(범위 지정 연산자)를 사용하여 "이 코드는 AMyActor의 기능이다"라고 명시한다.핵심: "선언 없이는 사용도 없다!"2. 변수 선언: 무엇을 기억할 것인가?변수의 위치에 따라 데이터가 살아있는 시간(수명)이 달라진다.멤버 변수 (헤더 선언): StepCo..

TIL 2026.04.28

[UE5]가장 가까운 몬스터 추적 UI 및 Is Valid 에러 해결

1. 오늘 해결한 과제 (Goal)1인칭 FPS 게임에서 화면 밖의 적 위치를 화살표로 알려주는 인디케이터를 구현하던 중, 두 가지 핵심적인 문제에 직면했습니다.모든 몬스터의 평균 위치(Average Location)가 아닌, 가장 가까운 적을 정확히 가리키는 로직의 필요성.몬스터가 제거되었을 때 발생하는 Pending Kill (Is Not Valid) 참조 에러 해결.2. 핵심 구현: 최단 거리 몬스터 타겟팅 로직단순히 Average Location을 사용하면 몬스터 무리의 중간 지점을 가리키게 되어 플레이어에게 정확한 정보를 줄 수 없었습니다. 이를 해결하기 위해 최솟값 찾기 알고리즘을 블루프린트로 구현했습니다.구현 로직 흐름초기화: MinDistance 변수를 아주 큰 값(예: 999999)으로 ..

TIL 2026.04.27

[Game Project] FPS 개발기: 게임 메커니즘 완성 및 UI 기능 구현 (UE 5.5.4)

오늘은 언리얼 엔진 5.5.4 기반의 FPS 프로젝트에서 그간 구현이 필요했던 핵심 기능들을 추가하고, 플레이 경험을 개선하기 위한 개인적인 아이디어를 구현하는 데 집중했습니다.1. 기능 구현 1: 몬스터 사망 시 카운트 관리 로직목표: 몬스터가 자폭하거나 사망할 때, 게임 내 전체 몬스터 수에 정확히 반영되도록 로직을 구현하는 것.구현 내용: 기존에는 몬스터가 파괴될 때 카운트 변수를 관리하는 처리가 누락되어 있었습니다. 몬스터의 자폭 또는 사망 시점의 이벤트 그래프에 몬스터 관리 변수를 감소시키는 로직을 추가하여, 현재 살아있는 몬스터 수를 실시간으로 정확하게 추적할 수 있도록 완성했습니다.학습 포인트: 게임의 상태 값(State)을 관리할 때는 객체의 생성과 파괴 생명주기에 맞추어 변수 업데이트 처..

TIL 2026.04.24

[TIL] C++ 배열의 평균 구하기 & C언어 반복문과 배열의 기초

1. 학습 내용프로그래머스 문제: 정수 배열의 평균값 구하기 (C++)C언어 강의: 반복문(Loop)과 배열(Array)의 구조 및 활용2. 문제 핵심 및 코드 (C++)배열의 평균을 구할 때 가장 중요한 것은 '정수 나눗셈'과 '실수 나눗셈'의 차이입니다. C++에서는 int끼리 나누면 소수점이 버려지므로, 합계를 double형으로 선언하여 정밀도를 유지해야 합니다.핵심 로직:배열의 모든 요소를 for문(또는 범위 기반 for문)으로 순회하며 합산(sum)한다.합산된 값을 배열의 크기(numbers.size())로 나눈다.이때, 합계 변수를 double로 선언하여 형 변환(Type Casting)을 수행한다.C++ #include #include using namespace std;double solu..

TIL 2026.04.24

[UE5]콜리젼을 이용한 아이템과 몬스터 행동패턴

오늘의 학습 핵심 요약1. Sphere Collision (구체 충돌체)개념: 보이지 않는 구 형태의 충돌 영역입니다.용도: 플레이어 감지 센서, 폭발 대미지 범위, 아이템 획득 범위 등으로 활용됩니다.Tip: 개발 중 범위를 확인하려면 디테일 패널에서 Hidden in Game 체크를 해제하면 게임 실행 중에도 와이어프레임이 보입니다.2. Cast To (형변환)개념: 부딪힌 물체(Actor)가 정확히 내가 원하는 타입(예: BP_FPSCharacter)인지 확인하는 과정입니다.로직: * 성공: 해당 타입의 기능을 사용할 수 있게 연결됩니다.실패 (Cast Failed): 다른 물체(벽, 적 등)가 닿았을 때 불필요한 로직이 실행되지 않도록 방지합니다.3. AI Move To & NavMeshAI Mo..

TIL 2026.04.23

[UE5] 타임라인(Timeline)으로 구현하는 부드러운 총기 반동과 에임 복귀

단순히 랜덤 플로트 값을 주던 딱딱한 반동에서 벗어나, 타임라인을 활용해 에임이 부드럽게 튀고 다시 원래 위치로 돌아오는 리얼한 반동 시스템을 구현했습니다. 로직 분리와 예외 처리 과정에서의 기록을 남깁니다.1. 타임라인: 부드러운 움직임과 반동 복귀의 핵심함수 내부에서는 타임라인을 사용할 수 없기에 커스텀 이벤트를 활용해 로직을 구성했습니다. 타임라인을 사용했을 때 가장 큰 수확은 두 가지였습니다.움직임의 부드러움: 에임이 순간이동하지 않고 곡선을 따라 유기적으로 움직입니다.반동 복귀(Recoil Recovery): 타임라인 그래프에 마이너스(-) 값을 추가하면, 별도의 복잡한 계산 없이도 에임이 상승 후 다시 원래 조준 지점으로 돌아오는 효과를 아주 쉽게 구현할 수 있습니다. 2. 축별 반동 제어수직..

TIL 2026.04.22

[UE5] 1인 레이드 프로토타입 제작기 (1) - 전투 시스템 기초 설계

목표언리얼 엔진의 컴포넌트 시스템과 블루프린트 인터페이스를 활용한 '1인 레이드' 전투 로직 구현1. 데미지 시스템 인프라 구축 (Decoupling)기존의 유니티 개발 방식에서는 클래스 간의 참조가 잦았으나, 언리얼에서는 **블루프린트 인터페이스(Blueprint Interface)**를 사용하여 객체 간의 결합도를 낮추는 방식을 채택했다.BPI_Damage 인터페이스 생성: TakeDamage 이벤트를 인터페이스로 정의하여 피격자가 무엇인지(플레이어, 보스, 환경 오브젝트 등) 상관없이 범용적으로 데미지를 전달할 수 있게 설계함.HealthComponent (액터 컴포넌트): 체력 데이터를 담는 컴포넌트를 별도로 생성하여 캐릭터 블루프린트에 부착.핵심: Cast To로 클래스를 직접 찾지 않고, 컴포..

TIL 2026.04.21

[UE5] 메타사운드(MetaSound)를 활용한 속도 반응형 바람 사운드 구현

오늘 실습에서는 언리얼 엔진 5의 메타사운드(MetaSound) 시스템을 사용하여, 캐릭터의 이동 속도에 따라 동적으로 변화하는 바람 소리를 구현했습니다. 단순히 오디오 파일을 재생하는 것이 아니라, 절차적(Procedural)으로 사운드를 생성하고 블루프린트와 연동하는 과정을 정리했습니다.1. 메타사운드 소스 생성 및 기본 설정현장감을 더하기 위해 3D 공간 연산이 필요 없는 2D 스테레오 배경음을 설계했습니다.에셋 생성: MSS_Wind라는 이름의 메타사운드 소스 생성.인터페이스 정리: 퍼시스턴트(지속형) 사운드로 사용하기 위해 UE.Source.OneShot 인터페이스와 On Finished 노드를 제거했습니다.출력 포맷: 디테일 패널에서 출력 포맷을 **스테레오(Stereo)**로 변경하여 좌우 ..