UE4 57

[UE4] 내적(DotProduct) 와 외적(CrossProduct)에 대한 이해

게임 개발에 있어 벡터 연산은 물리엔진 쪽으로 깊게 들어가면 빼놓을 수 없는 요소다. 3D공간에서 특히 벡터는 직관적이며, 여러가지 문제를 훨씬 효율적으로 해결해준다. 그래서 속도, 바람, 충돌 등 많은 물리계산이 벡터로 표현된다. 내적(DotProduct) 임의의 벡터 A와 B를 가정해보자. 벡터의 내적은 A와 B의 크기를 곱하고 사이각의 Cos값을 곱한 값이다. 결과값은 당연히 스칼라 값이 된다. 그렇다면 내적은 어디에 사용하는 것일까? 1. 두 벡터의 사이각 구하기 두 벡터의 사이각을 내적을 통해서 구할 수 있다. 게임에서 두 벡터의 값을 구하는 건 큰 문제가 아닐 것이다. 이 두 벡터를 내적하면 사이각을 구하고 이는 여러 게임 요소에 사용될 수 있다. 2. 적이 내 앞에 있는지 뒤에 있는지 나와 ..

UE4 2023.05.15
[UE4] 언리얼 UMG 한글 폰트 적용하는 법

개요 졸업 작품을 엘든링 모작 느낌으로 가다 보니 언리얼에서 기본으로 제공해주는 고딕고딕한 폰트보다 명조느낌의 폰트를 사용하고 싶어졌다. 예쁜 폰트들을 무료로 제공해주는 '눈누'라는 사이트에서 최대한 엘든링 느낌을 내는 명조폰트를 다운로드 받고 구글링을 시작했다. 그런데 역시 언리얼이라 그런가 정보가 많이 없었다. 구글에 나오는 정보들은 텍스트 렌더러 라는 맵에 텍스트를 배치하는 형식이 대부분이었고, 난 UMG에서 사용할 폰트가 필요했다. 처음엔 둘이 뭐가 다르겠어 생각했지만.. 결론부터 말하자면 텍스트 렌더러에서 사용하는 건 텍스트 머터리얼이고 UMG에서 폰트를 사용하려면 'Runtime'방식으로 폰트롤 로드해야 한다. 폰트의 구분 먼저 에디터에서 UI->폰트 로 폰트를 생성하면 디테일 창에서 Font..

UE4 2023.05.06
Internal Compiler Error : Tried to create a property, but another object already exists there. 오류 해결법

C++ 코드로 TEXT를 바인딩 해서 사용하려던 중에 저 오류가 발생했다. 분명 저번이랑 똑같이 한 것 같은데 구현이 안되길래 껏다키기도 해보고 저번 코드를 복붙도 해봤는데 안되길래 구글링을 해보았다. https://forums.unrealengine.com/t/internal-compiler-error/442610 Internal Compiler Error I just updated my project from 4.19 to 4.21.2, I copied the whole project, when I opened it I got two internal compiler errors: Internal Compiler Error: Tried to create a property CategoryName in ..

UE4 2023.05.01
[UE4] BehaviorTree - 서비스 노드(Service Node)의 종류

1. Default Focus Default Focus는 AI 컴트롤러의 포커스를 설정하여 블루프린트 및 코드에서 액터에 엑세스하는 바로 가기를 만든다. AI 컨트롤러의 포커스를 액터로 설정하면 해당 액터의 블랙보드 키에 엑세스하는 대신 AI 컨트롤러에서 직접 액터에 엑세스할 수 있다. 2. Run EQS 이 노드를 사용하여 지정된 간격으로 EQS(환경 쿼리 시스템) 템플릿을 정기적으로 실행하고 지정된 블랙보드 키를 업데이트할 수 있다. 3. Custom Services 나만의 커스텀 서비스를 생성할 수 있다. 블루프린트는 C++보다 성능이 떨어지므로 만약 최적화를 고려하고 있다면 기본 서비스를 사용하는 것이 좋다.

UE4 2023.04.12
[UE4] BehaviorTree - 데코레이터(Decorator)의 종류

1. Blackboard 블랙보드 노드는 지정된 블랙보드 키에 값이 설정되어 있는지 확인한다. 2. Check Gameplay Tag Condition 이 데코레이터는 게임 플레이 태그를 검사하고 해당 태그가 존재하는지 여부에 따라 실행 여부를 결정한다. 3. Compare BBEntries 두 블랙보드 키의 값을 비교하고 결과가 동일한지 여부에 따라 노드의 실행을 차단하거나 허용한다. 4. Composite 컴포짓 데코레이터 노드를 사용하면 언리얼이 기본으로 제공하는 노드보다 고급 논리를 설정할 수 있지만 전체 블루프린트만큼 복잡하지는 않다. 노드에 컴포짓 데코레이터를 추가하게 되면 컴포짓 데코레이터를 두 번 눌러 컴포짓의 그래프를 가져올 수 있다. 그래프 영역을 마우스 오른쪽 버튼으로 클릭하면 데코레..

UE4 2023.04.12
[UE4] BehaviorTree - 컴포짓 노드(Composite Node)의 종류

1. Selector 셀렉터 노드는 왼쪽에서 오른쪽방향 순서대로 자식 노드들을 실행시킨다. 자식 노드 중 한명이 성공하면 실행이 중지되며 셀렉터도 성공한 것으로 간주된다. 만약 셀렉터의 모든 자식이 실패하면 셀렉터도 실패한 것으로 간주된다. 좋은 어머니 스타일. 2. Sequence 시퀀스 노드도 마찬가지로 자식 노드를 왼쪽에서 오른쪽방향으로 실행시킨다. 다만 모든 자식이 실패하면 실패인 셀렉터와 달리 한명의 자식만 실패해도 시퀀스는 실패이다. 또한 실행을 멈추게 된다. 만약 모든 시퀀스자식이 성공하면 시퀀스는 성공으로 간주된다. 완벽주의자 어머니 스타일. 3. Simple Parallel Simple Parallel 노드를 사용하면 전체 트리에서 하나의 메인 테스크 노드를 허용한다. 메인 테스크가 완료..

UE4 2023.04.12
[UE4] Behavior Tree

개요 게임을 게임답게 재밌게 만드는 요소 중 하나는 AI라고 생각한다. 이 AI를 만드는 방법에는 여러가지가 있는데 그 중에서도 Behavior Tree는 가장 효과적인 AI 구성 방법으로 알려져 있지만, 배움의 난이도가 조금 높다는 것이 단점이다. 언리얼에는 감사하게도 AI를 편리하게 만들 수 있도록 직관적인 인터페이스와 함께 자체적으로 Behavior Tree를 제공한다. 오늘은 언리얼에서 제공하는 Behavior Tree의 사용법을 알아보고 예제를 하나 만들어보고자 한다. 블랙보드(BlackBoard) 블랙보드는 Behavior Tree(앞으로 줄여서 BT라고 부르겠다)에게 필요한 정보를 저장하고 공유하는 데 사용되는 데이터 저장소이다. 블랙보드는 각각의 게임 AI 객체에 대해 별도로 유지되며 키-..

UE4 2023.04.12
[UE4] Mixamo 애니메이션 리타겟(Retarget)

개요 전문적인 애니메이터가 있는 회사가 아닌 개인이 개발을 하다보면 여러 곳에서 애니메이션을 가져와야 하는 경우가 종종 있다. 그 중에서도 Mixamo라는 사이트에서 무료로 다양한 애니메이션을 제공받을 수 있기 때문에 많은 개발자들이 애용하는데, 문제가 하나 있다. 내가 다운받은 모델과 Mixamo에서 다운받은 모델은 겉보기엔 둘다 동일한 사람처럼 생겼지만 그 속의 해골?을 뜯어보면 전혀 다르다. 이해하기 쉽게 예를 들어보자. 내가 영국 사람에게 전화로 구르기 동작을 설명하려고 한다. 영국사람과 난 겉보기엔 동일한 구조를 가지고 있지만(사람이라면 어깨, 목, 골반, 다리, 팔 등이 동일한 구조다.) 그것을 부르는 이름은 나라마다 다르다. 그래서 내가 아무리 무릎을 굽히고 고개를 숙이라고 얘기해도 영국 사..

UE4 2023.04.09
[ue4] 루트 모션

개요 보통의 게임제작에서 애니메이션은 캐릭터의 모양새를 내기 위해 단순히 캐릭터에 입혀 재생시키는 것이지, 물리적인 움직임에 관여할 수 없다. 조금 기술적으로 말해보면 대부분의 애니메이션은 캐릭터 루트의 정지 상태를 유지하는 사이클을 통해 처리된다. 하지만 일부 애니메이션의 경우 캐릭터의 이동이 포함되어 있고, 그렇게 되면 플레이어 콜라이더 캡슐 밖으로 캐릭터가 벗어나고 애니메이션이 끝나면 부자연스럽게 돌아오는 문제가 발생하게 된다. 이를 해결하기 위해 주목해봐야 할 것이 바로 루트모션이다. 루트모션이란? 그렇다면 '루트 모션'이란 무엇일까? 간단히 말해 스켈레톤의 루트 본(root born)의 애니메이션을 기준으로 하는 캐릭터의 동작을 말한다. 위와 같은 경우의 처리를 위해서 캐릭터에서 루트의 모션을 ..

UE4 2023.04.09