본문 바로가기

TIL

(6)
UE Actor 라이프사이클 게임플레이 도중 다음 함수를 호출할 수 있지만, 플레이 도중 실제로 소멸되지 않는 액터가 많으므로 완전히 선택 사항입니다(가비지 컬렉션 참조).액터를 메모리에서 소멸시키는 대신 일단 게임 로직상 필요에 따라 액터를 제거(비활성화 또는 'pending kill' 상태로 전환)해야 한다는 의미입니다. 즉, 액터는 즉각적으로 메모리에서 삭제되지 않고, AActor::Destroy를 호출하여 레벨에서 제거하고, 나중에 가비지 컬렉션을 통해 실제 메모리 해제가 이루어지게 됩니다.액터는 킬 보류 중(pending kill)으로 표시되고 레벨의 액터 배열에서 제거됩니다.액터의 수명이 다해가는 것을 보장하기 위해 AActor::EndPlay가 여러 곳에서 호출.플레이 도중 액터가 포함된 스트리밍 레벨이 언로드되면 이 ..
매크로와 RTTI #define UCLASS(ClassName, ParentClass) \public: \ static UClass* StaticClass() { \ static UClass StaticClassInstance(#ClassName, ParentClass::StaticClass()); \ return &StaticClassInstance; \ } \ virtual UClass* GetClass() const { return StaticClass(); }위 매크로를 사용하면.class A : public SceneComp{ UCLASS(A, SceneComp)public: //기타...}아래처럼 코드 확장.class A : public sceneComp{ static..
World Grid 렌더링 최적화: 두 가지 접근 방식 기존 방식: 모든 데이터를 하나의 벡터에 삽입하여 렌더링과거에는 World Grid, AABB, Cone, OBB 등 렌더링에 필요한 모든 정점 데이터를 미리 계산한 후,하나의 벡터(예: worldVector)에 모두 저장하고,D3D11_PRIMITIVE_TOPOLOGY_LINELIST 상태에서 단일 드로우콜(context->Draw)로 한 번에 렌더링하는 방법을 사용했다.이 방식의 장점은 데이터가 미리 준비되어 있어 렌더링 시 바로 사용할 수 있다는 점이다.그러나 AABB나 Cone이 회전하거나 위치 변경이 발생할 때마다, 전체 버퍼를 다시 업데이트해야 한다.동적 변환이 자주 발생하면 매 프레임마다 CPU가 매번 정점 데이터를 재계산하면서 불필요한 연산 비용이 발생하게 되고, 이를 최적화할 수 있는 여..
std::vector erase, std::remove 관련 std::remove 함수는 제거 대상이 존재하지 않으면 vec.end()를 반환한다.이 경우 erase의 단일 요소 제거 버전을 호출하면 정의되지 않은 동작이 발생할 수 있다. 범위 버전을 사용하면 반환된 new_end부터 vec.end()까지의 빈 범위가 안전하게 처리된다.따라서 아래와 같이 수정하는 것이 좋다.vec.erase(std::remove(vec.begin(), vec.end(), target), vec.end());.
FName 문자열 비교에 있어서 기존의 strcmp(pString1, pString2) == 0 방식을 사용하는 대신, 문자열을 한 번만 저장하는 풀을 활용하여 인덱스끼리 비교하는 방법을 사용한다. 이 방식은 문자열 전체를 매번 비교하는 오버헤드를 줄이고, 동일한 문자열이 중복 저장되는 문제를 해결하여 메모리 사용량을 크게 개선한다.예를 들어, FNamePool 클래스는 문자열을 풀에 저장하고, FName 클래스는 해당 문자열의 인덱스를 저장한다. 이후 두 FName 객체를 비교할 때는 인덱스 값만 비교하면 되므로, 비교 연산의 효율성이 크게 향상된다.간단한 코드 예시는 다음과 같다:class FName { int index;public: FName(const std::string& Name) { index..
Today I Learned 게임 테크랩을 하면서 매주 배운 내용을 정리해 기록하려고 합니다. 가독성이 뛰어나지는 않고, 낙서장 같은 느낌이 들겠지만,제 성장 과정을 담아내는 공간이 될 것입니다. 이 블로그를 통해 "아, 이걸 정리해뒀었지!?" 하고 다시 찾아볼 수 있도록,배운 것들을 꾸준히 기록해 나가겠습니다.