쾌락없는 책임 (공부)/Unreal
-
[Unreal] Spectator Pawn Input이 제대로 안되는 경우쾌락없는 책임 (공부)/Unreal 2023. 7. 5. 15:21
개요 - 상황 설명 현재 플레이어는 WASD와 마우스 좌클릭을 사용하고 있는 상태입니다. 여기서 죽고 나면 Spectator Pawn을 생성해 A, D, 마우스 좌, 우클릭을 통해서 관전할 플레이어를 조작할 수 있게 계획했습니다. 그런데 Spectator Pawn을 생성하고 나면 마우스 우클릭만 사용이 가능하고 기존 플레이어가 사용하고 있는 Input을 사용할 수 없는 문제가 있었습니다. 여기서 다짜고짜 Spectator Pawn의 IMC 우선순위를 높여버리면 Spectator Pawn이 게임 시작과 동시에 생성되면서 Input을 Spectator Pawn이 먹는 문제가 있습니다. 해결법 - ClearAllMappings void AFASpectatorPawn::SetupPlayerInputCompone..
-
[Unreal] Seamless, non Seamless쾌락없는 책임 (공부)/Unreal 2023. 6. 20. 15:19
개요 언리얼에서 씬을 옮기는걸 Travel이라고 하는데 여기서 방식이 Seamless, non-Seamless로 나뉘게 됩니다. 여기서 Seamless는 이름처럼 non-blocking이고 non-Seamless는 blocking입니다. 둘의 차이 분류 Seamless non-Seamless blocking 여부 (연산을 위해 멈출지 여부) non-blocking blocking Transition level 여부 (중간 로딩창) 있음 (엔진에서 설정해줘야 함) 없음 게임을 해본 입장에서 간단하게 이야기하면 Seamless는 로딩창을 가지는 것이고 non은 가지지 않는 것입니다. 그리고 보통은 Seamless 이동이 더 원활하고 연결 시에 문제가 있어도 대처할 방법들이 있어 선호된다고 합니다. non-S..
-
[Unreal] Unreal ToolTip, 툴팁 추가해보기쾌락없는 책임 (공부)/Unreal 2023. 5. 24. 16:18
개요 위 사진처럼 특정 아이콘에 마우스를 가져다 대면 간단한 설명 창이 하나 나오게 됩니다. 이런 것들을 보통 'ToolTip - 툴팁'이라고 합니다. 이런 기능을 언리얼에서 대부분 할 수 있게 준비를 해 주는데 이번에 이 ToolTip을 어떻게 만드는지 간단하게 메모해 두려고 합니다. 제가 까먹을까 봐요 ToolTip 은 어디서 볼 수 있는가? 위 화면은 저의 인벤토리 슬롯의 버튼의 Detail창입니다. 이곳에서 Behavior 창을 보시면 Advanced > Tool Tip Widget을 보실 수 있는데 여기서 BP를 통해 세팅할 수 있게 되어 있습니다. Tool Tip Widget에서 오른쪽 'Bind' 버튼을 눌러 Create... 를 하면 이런 BP 함수가 만들어지는 것을 볼 수 있습니다. 이 ..
-
[Unreal] 언리얼 멀티플레이에서 얻어낸 간단 팁들쾌락없는 책임 (공부)/Unreal 2023. 5. 18. 19:19
개요 개요의 개요입니다. 일단 먼저 명시하는 건 아직 멀티플레이를 완벽하게 이해한 것이 아닌, 스스로 중간 정리를 하기 위해 작성 중인 글입니다. 최대한 바른 정보를 올리는 게 맞아 최대한 검증은 해 보지만, 아직까지 경험이 많지 않아 그 경험으로 인해 나오는 부족함이 있을 것입니다. 혹시나 부족한 부분이 있다면 언제나 댓글로 제보 부탁드리고 스스로도 계속 검증해서 좋은 내용만 담아보겠습니다. MovementComponent에서 WalkSpeed는 리플리케이션 대상이 아니다 그렇습니다. 혹시 달리기 등을 통해 MovementComponent의 WalkSpeed를 변경하는 분들은 다른 방식을 사용해야 합니다. GameMode는 서버에만 있다 그렇습니다. 아무리 클라이언트가 발광을 해도 얻을 수 없는 그것,..
-
[Unreal] 언리얼 유효성 검사 - IsValid, == nullptr, ensure쾌락없는 책임 (공부)/Unreal 2023. 5. 15. 22:54
개요 평소 언리얼에서 포인터 타입들에 대해 유효성 검사를 할 때 if(Ptr == nullptr) return; 이런 식으로 사용했습니다. 그런데 이와 관련한 여러 함수들이 있는 것을 점차 발견하게 되었습니다. 그래서 한번 차이를 알아보고 어떤 차이점이 있는지 알아보려고 합니다. IsValid() 이 함수가 유효성 검사에서 주로 사용되는 함수입니다. FORCEINLINE bool IsValid(const UObject *Test) { return Test && FInternalUObjectBaseUtilityIsValidFlagsChecker::CheckObjectValidBasedOnItsFlags(Test); } 자세히 보면 Test 포인터가 nullptr임을 판단함과 동시에 무언가 CheckObje..
-
[Unreal] 언리얼 Anim Notify State C++로 작성해보기쾌락없는 책임 (공부)/Unreal 2023. 4. 27. 14:06
개요 언리얼에서 Montage 를 사용하게 되면 애니메이션의 타이밍에 무언가를 호출하기 위해 Notify를 사용하는 경우가 있습니다. 이런 Notify는 일단 단일, 즉 1번 불리게 되는 기능이고 특정 구간동안 함수를 호출하고 싶다라고 한다면 Notify State를 사용하면 됩니다. BP로 만드는거야 여기저기 자료가 많이 있을 것 같고, 그래서 C++로 이를 작성하는 방법을 간단하게 적어보겠습니다. Notify State cpp 함수 일단 cpp 함수를 만들면서 Notify State를 상속받는 함수를 제작해야 합니다. 여기서 AnimNotifyState를 상속받았다면 재정의 가능한 함수 3개를 보시면 됩니다. NotifyBegin, NotifyTick, NotifyEnd 입니다. 이름을 들어보면 딱 ..
-
[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; } 아무래도..