2026/01 5

[TIL] Unreal Engine 5: FDamageEvent 상속을 통한 커스텀 데미지 시스템 구현

1. 개요언리얼 엔진 5의 기본 데미지 시스템(TakeDamage)은 float 데미지와 UDamageType 클래스 정보만 전달하는 한계가 있습니다. 액션 게임에서 필수적인 '공격 강도(Hit Intensity)'와 같은 가변적인 데이터를 유실 없이 피격자에게 전달하기 위해 FDamageEvent를 상속받아 커스텀 이벤트를 구축한 과정을 정리합니다.2. 핵심 문제 해결 과정1) 왜 UDamageType에 변수를 넣으면 안 되는가?원인: UDamageTypeClass는 클래스 정보(설계도)일 뿐입니다. 런타임에 "이번 공격은 강(Heavy)이야"라고 클래스 내부 멤버 변수를 수정하면, 해당 클래스를 공유하는 모든 공격이 영향을 받거나 데이터가 초기화됩니다.해결: 매 공격 시 생성되는 인스턴스인 FDama..

[C++] 배열과 리스트 그리고 벡터

1. 배열과 리스트의 핵심 이론 1) 배열배열은 메모리의 연속 공간에 값이 채워져 있는 형태의 자료구조. 배열의 값은 인덱스를 통해 참조할 수 있으며, 선언한 자료형의 값만 저장할 수 있다.특징인덱스를 사용하여 값에 바로 접근 가능새로운 값을 삽입하거나 특정 인덱스에 있는 값을 삭제하기 어렵다. 값을 삽입하거나 삭제하려면 해당 인덱스 주변에 있는 값을 이동시키는 과정이 필요하다.배열의 크기는 선언할 때 지정할 수 있으며, 한 번 선언하면 크기를 늘리거나 줄일 수 없다.구조가 간단하므로 코딩 테스트에서 많이 사용한다. 2) 리스트리스트는 값과 포인터를 묶은 노드라는 것을 포인터로 연결한 자료구조. 비연속적 공간. (노드란 CS에서 값, 포인터를 쌍으로 갖는 기초 단위를 부르는 말.)특징인덱스가 없으므로 값..

[C] time, rand, srand 함수

1. 세 함수의 역할과 관계 컴퓨터는 진정한 의미의 우연을 만들지 못한다. 미리 정해진 복잡한 수열(의사 난수)에서 숫자를 하나씩 꺼내올 뿐이다. rand(): 미리 생성된 난수 목록에서 다음 숫자를 하나 꺼내오는 함수입니다. (0 ~ 32767 사이의 값 반환)srand(seed): 난수 목록을 생성하기 위한 '기준점(Seed)'을 설정하는 함수입니다. 똑같은 Seed를 넣으면 항상 똑같은 난수 순서가 나옵니다.time(NULL): 현재 시간을 초 단위 정수(Unix Time)로 반환합니다. 매초 값이 변하기 때문에 가장 대중적인 Seed 값으로 사용됩니다. 2. 왜 srand(time(NULL))을 같이 쓰는가?만약 srand를 쓰지 않고 rand()만 호출하면, 프로그램을 껐다 켤 때마다 항상 같..

C언어 공부 2026.01.22

TIL: 언리얼 엔진 5 C++ 기반 막기 & 패링 시스템 구현

1. 핵심 개념 및 설계단순히 애니메이션을 재생하는 것이 아니라, 캐릭터의 상태(State)를 정의하고 공격 판정이 들어왔을 때 이를 어떻게 처리할지가 핵심입니다.막기(Blocking): 공격 대미지를 일정 비율 감소시키거나 무효화함.패링(Parrying): 공격이 적중하기 직전 특정 프레임에 막기를 성공했을 때, 공격자를 경직(Stun) 상태로 만들고 반격 기회를 얻음.2. 주요 코드 구현 (Senior Programmer 스타일)A. 상태 정의 및 변수 설정 (MyCharacter.h)bool 변수 하나로 관리하기보다 UPROPERTY를 통해 에디터에서 제어 가능하게 설계합니다.// ECharacterState 등의 열거형으로 상태를 관리하는 것이 유지보수에 유리함UPROPERTY(EditAnywhe..

FORCEINLINE

FORCEINLINE은 컴파일러에게 해당 함수를 반드시 "인라인(Inline)" 처리하라고 강하게 지시하는 매크로입니다. 1. 인라인(Inline)이란?보통 함수를 호출하면 프로그램은 함수가 저장된 메모리 주소로 점프했다가, 실행이 끝나면 다시 돌아옵니다. 이 과정에서 약간의 시간(오버헤드)이 걸립니다. 인라인 함수는 컴파일러가 함수를 호출하는 곳에 함수의 본체 코드를 그대로 복사해서 집어넣습니다.장점: 함수 호출 오버헤드가 사라져 실행 속도가 빨라집니다.단점: 함수 내용이 길면 전체 코드 크기(Binary Size)가 커집니다. 2. 왜 inline 대신 FORCEINLINE인가?표준 C++의 inline 키워드는 컴파일러에게 보내는 "힌트"일 뿐입니다. 컴파일러가 판단하기에 "함수가 너무 복잡한데?"..