쾌락없는 책임 (공부)/Unreal
-
[Unreal] NewObject로 생성한 오브젝트에서 GetWorld() 가 nullptr 이라면쾌락없는 책임 (공부)/Unreal 2023. 4. 19. 21:50
개요 프로젝트를 진행하던 중 NewObject로 동적으로 생성한 인스턴스에서 GetWorld를 부를 수 없는 문제가 있었습니다. 왜 GetWorld가 nullptr을 반환할까 궁금하던 와중 결론을 얻게 되었습니다. Outer 인자를 지정해주지 않아서 이런 일이 있었던 것입니다. 결론 UObjet::GetWorld()는 조금 특수하게 되어 있습니다. class UWorld* UObject::GetWorld() const { if (UObject* Outer = GetOuter()) { return Outer->GetWorld(); } #if DO_CHECK if (IsInGameThread()) { bGetWorldOverridden = false; } #endif return nullptr; } 아무래도..
-
[Unreal] 언리얼 ListView 간단하게 알아보기쾌락없는 책임 (공부)/Unreal 2023. 3. 23. 13:35
개요 아이템을 파밍 할 때 아이템에 픽업이 뜨는가, 사용자에게 근처에 있는 아이템 목록을 알려 주는가 등 여러 가지 방법이 있습니다. 저는 프로젝트에서 '플레이어 근처에 있는 아이템들의 목록을 보여주자' 라고 결정을 했고 이에 따라 이 목록을 위한 List View 가 필요했습니다. 다만 역시 알아보면 C++로 처리한 래퍼런스를 찾기 어려워 제가 만든 걸 공유하고자 이렇게 글을 쓰게 됩니다. - 간단 요약만 알고 싶다면 맨 아래로 C++ 코드로 보는 ListView class UListView; UCLASS() class PROJECTFA_API UPickupItemList : public UUserWidget { GENERATED_BODY() public: UPROPERTY(meta=(BindWidge..
-
[Unreal] Unreal Engine IK solver - IK는 어떤 원리로 동작할까?쾌락없는 책임 (공부)/Unreal 2023. 3. 20. 13:23
개요 엔진에서 IK 관련한 기능들을 많이 사용하게 됩니다. 발을 땅에 자연스럽게 옮긴다던가, 손 한쪽을 무기를 받치게 수정해 준다던가. 이런 기능들을 사용하면서 대충 본을 이 위치로 옮겨준다는 생각만 했지 원리에 대해서는 크게 생각해 본 적이 없습니다. 그래서 이번에 FK, IK의 차이점을 알아보고 IK solver들은 어떤 것들이 있는지 알아볼 예정입니다. IK와 FK FK가 IK에 비해서 조금 더 쉬운 느낌입니다. 간단하게 본이 있으면 본에 회전을 적용해 움직이는 방식입니다. 팔을 예시로 들면 '팔 관절을 움직여 팔을 움직인다'라는 조금 이두운동에 가까운 느낌을 줍니다. 단순히 회전을 적용하면 되는 것이기에 큰 비용이 발생하지는 않으나 직관적이지 못한 문제가 발생하게 됩니다. 예를 들어 '컵을 주워야..
-
[Unreal] Additive Animation - 애디티브 애니메이션쾌락없는 책임 (공부)/Unreal 2023. 3. 13. 22:43
개요 스마일게이트 UNSEEN 프로그램을 진행하기 위해 간단한 3인칭 움직임을 구현하던 도중 점프 착지에서 플레이어가 땅으로 가라앉는 거 같은 문제가 생기게 되었습니다. 다름 아닌 기본 애니메이션이 Addtive로 설정되어 있어서 이런 문제가 발생하게 된 것인데요. 일단은 그 설정을 끔으로써 원하는 애니메이션 작업을 할 수 있었지만 왜 이런 식으로 재생되었는지는 잘 모르는 상태입니다. 그래서 이번 글을 쓰면서 한번 정리해보려고 합니다. Additive Animation은 기본 애니메이션에 Add 하는것 말 그대로입니다. Additive Animation(애디티브 애니메이션)은 기존의 애니메이션과 재생하는 애니메이션의 차이를 통해 애니메이션을 만드는 것입니다. 만일 걷고 있는 상황에서 점프 애니메이션을 더..
-
[Unreal] 언리얼 블루프린트 vs C++, 왜 프로그래머는 C++을 써야 하는가?쾌락없는 책임 (공부)/Unreal 2023. 3. 10. 22:53
개요 언리얼을 처음 맛보면 대부분 블루프린트로 시작하게 됩니다. 저 또한 첫 접근은 블루프린트였습니다. 그런데 조금 더 심화된 과정에서는 C++을 위주로 코딩을 하게 됩니다. 이유를 들어보면 C++ 이 속도가 더 좋아서 라는 대답이 주를 이루게 되는데요. 이번에 왜 블루프린트가 C++보다 느린지에 대해서 여러 자료들을 알아봤습니다. 일단 Blueprint는 더 많은 명령을 거치게 된다 위 이유가 속도와 관련된 주된 이유였습니다. 블루프린트 함수들은 C++과 달리 객체로 유지가 됩니다. 어떤 C++ 함수들을 호출할지에 대한 정보를 가지고 있어야 한다고 합니다. 때문에 더 많은 명령을 거치고 cpu, 램 등을 많이 사용하게 된다고 합니다. 이러한 이유로 인해서 컴파일을 한다 해도 C++의 컴파일러처럼 인라인..
-
[Unreal] 언리얼 인터페이스 이야기 - Unreal C++ Interface쾌락없는 책임 (공부)/Unreal 2022. 11. 28. 21:28
개요 일단 기존의 C++에서는 '인터페이스'와 관련한 이야기가 없습니다. 이 글을 쓰는 시점에서는 __interface라는 키워드가 있지만 이는 vs의. Net 플랫폼에서만 되는 것으로 알고 있어 현재 표준은 없는 걸로 판단이 됩니다. 하지만 다양한 디자인 패턴들을 적용해 유지보수를 하기 위해서는 이런 '인터페이스'와 관련한 개념이 꼭 필요하게 되며 이로 인해서 언리얼에서는 이를 위한 UInterface를 제공해주게 됩니다. 이번에는 언리얼을 공부하면서 간단하게 알아낸 이 인터페이스와 사용 방법에 대해서 알아보겠습니다. Unreal Interface 생성법 일단 Blueprint와 C++ 클래스를 만드는 2가지 방법이 있지만 이번 글은 C++을 기준으로 설명하겠습니다. C++에서 생성하면 일단 C++, ..