목록전체 글 (135)
게임 개발 메모장
1. PendingKill Actor는 일반적으로 가비지 콜렉팅되지 않는데, 월드 오브젝트가 액터 레퍼런스 목록을 저장하기 때문이다. 액터는 Destroy() 를 호출하여 명시적으로 소멸시킬 수 있다. 그러면 레벨에서 제거되어 pending kill (킬 대기) 상태로 마킹, 잠시 후 다음 가비지 콜렉션 때 지워진다는 뜻이다. 언리얼의 엑터나 컴포넌트는 Destroy를 호출하여 제거를 하게 되면 씬 상에서는 제거된 것으로 보이지만 메모리에서는 Pending Kill 상태가 되어 존재하며 다음 GC(Garbage Collection) 실행시 메모리에서 해제된다. 이는 에디터의 프로젝트 기본 설정상으로 1분단위로 Pending Kill 상태인 오브젝트를 제거하며 사용자가 설정을 변경할 수 있다. C++ 코드..
실행시간에 실시간 게임플레이 데이터를 분석할 수 있도록 해주는 툴입니다. https://docs.unrealengine.com/4.27/ko/ProgrammingAndScripting/GameplayDebugger/ 게임플레이 디버거 실행시간에 실시간 게임플레이 데이터를 분석할 수 있도록 해주는 툴입니다. docs.unrealengine.com
참고 : C++ Assert - https://yooyoungjae0627.tistory.com/6 assert 는 일반적으로 참조하고자 하는 변수가 null 인지 아닌지를 체크하는 용도로 자주 사용된다. 실제 개발을 할 때는 프로젝트명으로 된 헤더 파일에 assert 구문을 이용한 커스텀 로그를 만들어 놓는 게 간편하다. 언리얼에서의 assert 종류는 크게 check, verify, ensure 이 있다. // assert 는 DO_CHECK = 1 일때만 실행 // check 는 false 값이면 실행을 중지 check(Mesh != nullptr); checkf(MyPtr, TEXT("MyPtr is nullptr")); // false 이면 로그 출력 checkcodeMyPtr, TEXT("My..
- 디버그 모드에서 디버깅시 어떤 이유 때문에 에러가 났는지를 알 수 있는 유용한 키워드다. - #include 를 해주어야 사용이 가능하다. 1. assert(조건) * 이 조건식이 false 라면 런타임 에러가 나도록 한다. #include using namespace std; int main() { int number = 5; assert(number == 4); return 0; } 1) Release모드 에선 아무런 문제가 없는 코드. 2) 하지만, Debug모드에선 에러를 발생. - assert(number == 4) : number 값이 4가 아닌 5이기 때문. - 프로그래머가 직접 number값이 4가 맞는지 찍어보지 않더라도 number값이 4가 아니면 에러를 발생시켜주므로 디버깅 시 편..
C/C++를 사용하는 이유 중 하나로는 빠른 속도와 커스터마이징 가능한 자원관리 등의 최적화를 위해서 사용할 것이다. 이러한 부분에서 코드를 개발하면서, 컴파일러단에서 부터 코드를 최적화 시켜서 더욱 바르게 실행 할 수 있도록 하려는 노력들이 많이 있다. 이처럼 C/C++ 에서는 내가 원하는대로 코드를 작성하더라도 컴파일러에 의해 최적화 시킬 여지가 있으면 그러한 부분은 컴파일러가 최적화 시켜서 돌아가도록 만들어준다. RVO(Return Value Optimization) #include class Yoo { public: Yoo(const std::string& name) { this->name = name; std::cout