[DevNote] Input Condition
조건부 Input 트리거 IMC에서 설정하는 Input Trigger를 커스텀하게 추가할 수 있다
조건부 Input 트리거 IMC에서 설정하는 Input Trigger를 커스텀하게 추가할 수 있다
Component를 다른 타입으로 교체
마우스로 인게임 오브젝트를 Hover하거나 Select 해야하는 상황 보통은 이 경우에 Screen 좌표상에서 InGame World로 Deprojection을 통해 Ray를 쏴서, 해당 Ray에 Hit되는 첫번째 Object를 반환하는 것 같다 Select야 Mouse 클릭할 때만 하면 된다지만, 이 방식대로라면 Hover는 매번 Ray를 ...
Show Bone 커맨드 사용 시 크래시 이슈 애니메이션 파트 쪽에서 showbone 커맨드 입력 시 크래시가 발생한다는 문의가 들어왔다 확인해보니, 아래 부분에서 index 개수 차이로 발생하는 문제였다
캐릭터가 Random한 Idle Animation을 출력하게 하고 싶어요
NU1902: 보안 취약성에 대한 패키지 종속성 감사 딱히 영향을 줄만한 변경점이 없었는데 갑자기 nuGet쪽 취약성으로 인해 빌드 머신에서 빌드가 안되는 현상이 발생했다 어처구니 없는 건, 문제가 되는 패키지들이 전부 최신 버전이라는 것… 근본적인 해결 방법은 찾지 못했지만, 일단은 취약성 경고를 에러로 처리하는 ...
갑자기 든 의문
StateTree를 쓰면서 명심해야 할 점
Control Rig를 적용한 상태에서의 R&D
Possess 아닌 탈 것 탑승 기능 구현
문제 상황 언리얼 엔진 5.4 버전에서 Projectile Movement Component 사용 시, 전 게임에 걸쳐서 액터들의 Collision Response가 오염되는 현상
가장 가까운 NavMesh 위치 탐색 ProjectPointToNavigation을 많이 사용한다
Motion Matching 개념 현재 캐릭터의 동작과 상태를 기준으로, 가장 적절한 다음 동작을 선택하는 로직 ABP의 StateMachine과 BlendSpace를 대체 가능 자연스러운 Blend를 위한 작업 Cost 감소 여러 상황에 대응되는 애니메이션 에셋이 여러 개 있고, 테이블이 이 애니...
Mass System
Skill Data
세이브 포인트 캠프라는 이름의 체크 포인트를 정의했다 던전 안에는 여러 캠프가 존재하며, 던전 진입 시 마지막으로 활성화 및 상호작용한 체크포인트의 위치로 스폰되어야 했다 멀티 상황에서 최대 4개의 스폰 포인트가 있고, 스폰 시 특정 애니메이션을 출력해야 했다
Update Rate Optimization 이슈
액션의 단위 Abl 플러그인을 사용하면서, 하나의 Abl이 캐릭터의 액션 단위로 정립되었다 Abl은 재생할 애니메이션, 그리고 이에 동반하는 효과 등을 여러 개의 AblTask로 구성했다. Abl 플러그인이 기본적으로 지원하는 Branch 기능을 통해, 하나의 Abl에서 다른 Abl로 Transition 할 수 있었다 ...
플레이어 캐릭터 사망
Linked Anim Layer 하나의 AnimBP에서 캐릭터가 필요한 모든 상태 관리를 할 수도 있다 하지만 동일한 상태에 대해 다른 애니메이션, 다른 로직이 필요하다면? 캐릭터가 그냥 달리는 애니메이션과, 무기를 들고 달리는 애니메이션이 달라야 한다면? State Machine 구조는 동일한데 애니메이...
소프트타겟, 소프트락 개념
ALS Plugin 카메라
멀티 상황에서 필요한 정보 정의
문제 상황 ALS 캐릭터 액터의 Scale을 늘렸을 때, 캐릭터의 로코모션 애니메이션의 PlayRate가 보정되지 않는 현상 발이 미끄러지는 현상 발생
Mover 기존의 Character Movement Component를 대체할 목적의 언리얼 공식 플러그인 포스트 작성일 기준으로 아직 Experimental Mover 1.0이 나오자마자 곧바로 CMC 지원을 끊을 계획은 없고 장기적으로 대체할 것이라 한다 언리얼 캐릭터의 기본적인 Movement...
Pipeline State Object Cache 구식 API는 Draw Call 전에 관련 GPU 파라미터를 변경하기 위해 여러 번의 콜을 해야했다 Parameter A 업데이트 + Parameter B 업데이트 + … 최신 API는 PSO라는 GPU Parameter의 집합, 즉 GPU State를 패키징...
문제 상황 카메라와 캐릭터 사이에 어떤 장애물이 있고, 시야를 가리는 오브젝트가 특정 타입인 경우 이 오브젝트를 투명화 시켜야 했다 그런데, 게임 내의 대부분의 레벨 액터는 Nanite Naterial을 사용 중이다
Custom Depth Pass
Session Search 안되는 현상
Widget은 어디에 붙여야 하나 어떤 Widget은 World 위치를 투영해 Screen 상에 표기하는 게 더 낫다 게임에서 한 번에 단 하나의 상호작용만 가능하고 고정된 위치에 표기한다면, 상호작용 Widget은 Screen에 상시 존재하고 필요할 때마다 노출하는 것이 낫다 락온 UI라든가, 원거리 무기류 장착 ...
Game Feature
하드락 카메라 액션 게임에서 특정 적을 대상으로 락온을 걸 수 있다 이 때 카메라는 대상을 계속 추적한다
check 사용 케이스 DO_CHECK = 1인 경우 매크로 내부를 실행 데스트 실패 시 중단점 체크 + 크래시 리포터 DO_CHECK = 0인 경우 매크로를 무시한다
플레이어 캐릭터의 행동을 제약하는 방법 플레이어가 특정 조건 및 상황에 따라 어떤 행동을 하지 못하게 해야하는 경우가 있다 마을에서 공격하지 못한다거나 빈사 상태인 경우에는 이동 이외에는 아무 것도 못한다거나 이런 경우 캐릭터의 행동이 어떻게 관리되는지에 따라 제어하는 방법이 다를 수 있다 ...
스태틱 메시와의 차이 기본적으로 스태틱 메시와의 큰 차이는 없다 나나이트 메시는 더 많은 수의 트라이앵글과 인스턴스를 처리할 수 있다 나나이트는 머티리얼을 굽지 않아도 된다 더 적은 메모리를 사용하며, 더 빠르게 렌더링된다 최적화되지 않은 나나이트 메시와 스태틱 메시를 비교할 때 디스크를 차지하는 용량은 비슷하나, ...
개요 Lumen Essential
Braking Friction
Bit field 선언
FORCEINLINE과 inline 일반적인 inline 키워드를 사용했을 때, 컴파일러는 해당 구문을 inline화 할지 여부를 스스로 결정한다 하지만 __forceline 키워드는 컴파일러의 판단여부와 무관하게 무조건 inline화 하도록 강제한다 __forceinline은 VS 컴파일러에서 제공하는 non-standa...
BlueprintPure 함수를 블루프린트에 노출시킬 때, 이 함수가 OwnerObject에 아무 영향을 주지 않는 것을 보장하는 키워드 Gettor의 성격을 가진다
Unity Build C / C++의 프로젝트를 컴파일 할 때, 여러 translation unit을 하나로 뭉쳐서 빌드하는 방식 Unity 엔진과는 전혀 무관하다
Transient 언리얼 오브젝트는 직렬화 기능으로 오브젝트의 UPROPERTY 매크로로 속성을 저장 및 로딩할 수 있다 이를 테면, CurrentHP와 같은 값은 게임을 시작할 때마다 변경되므로 이 값을 저장 또는 로딩하는 것은 디스크 낭비다 이런 속성에 Transient 키워드를 추가해 직렬화 대상에서 제외할 수...
UFUNCTION Overload UFUNCTION 함수는 Overload 할 수 없다 만약 Overload 필요하다면 UFUNCTION 키워드를 제거하고 사용해야 한다 UHT가 Unreal Function을 등록하기 위해서 Iterate 할 때, 헤더 파서가 확인하는 것은 함수의 이름 뿐 ...
```c++ UCLASS(BlueprintType, Deprecated) class CLIENT_API UDEPRECATED_CameraBehaviorDataAsset: public UDataAsset { GENERATED_BODY()
Biped Movement 직립 2족 보행 플러그인은 ALS plugin으로 디테일을 표현할 수 있다 Unreal에서 공식적으로 지원하는 Motion Matching 플러그인도 있다 그렇다면 4족 보행은?
Behavior Tree Service Composite 혹은 Task에 Attach 되어 분기가 실행중인 동안 정의된 빈도로 실행 Blackboard 값 확인 및 업데이트 목적으로 사용 TaskNode를 통해서 업데이트 하기도 한다
Perception Component 주로 AI의 타겟 인지 및 해제를 관리하는 목적의 컴포넌트 자극(stimulus)을 인지하면서 호출하는 대표적인 delegate는 아래와 같다 OnPerceptionUpdated 자극을 처리하는 과정에서 자극을 제공한 모든 액터를 어레이로 받는다 ...
Gameplay Ability System (GAS) 캐릭터의 능력이나 속성 등을 관리할 수 있게 도와주는 프레임워크 캐릭터의 능력 또는 스킬의 구현 Gameplay Ability 액터의 수치화된 속성 관리 Atttibute 액터에 특정한 효과(Effect) 적용 ...
멀티플레이어 게임 멀티플레이어 게임에서는 동일한 게임이 여러 인스턴스에서 동시에 실행되어야 한다. 공유된 세계에 대해 일관된, 동일한 그림을 그려내야 한다
FName 텍스트에 대소문자 구분을 하지 않는다
Reflection 프로그램이 런타임, 그러니까 실행중에 자기 자신의 구조를 검사하고 조작할 수 있는 능력 일반적인 C++에서는 컴파일 시점에 모든 정보가 결정되고, 컴파일된 상태의 C++ 언어는 CPU로 전달된다 어떤 class A가 어떤 멤버 변수 혹은 함수를 가지고 있는지 알 수 없다 리플랙션이 지원되는 언...
Garbage Collection
루트 모션 사용 여부에 따른 차이
Parts of the AI Perception System Unreal은 AI Perception System을 통해 Actor가 무엇을 감지하는지, World의 어떤 부분을 감지할 수 있는지를 제어하게 해준다. 수집한 정보는 Event-driven system이 처리하면서 간단해지며 가벼운 비용만을 소모한다. 결과적으로 블루프린트 안에서 전범위에 ...
Navigation with AI 길찾기를 통해 주변 환경을 헤쳐나가는 건 AI의 기본이지만 단순히 A 지점에서 B 지점으로 이동하는 것은 마냥 쉬운 일은 아니다. 길찾기는 경로 탐색과 장애물 회피로 2 단계로 나눌 수 있다. 여기서 장애물이란 고정된 상태의 물체로 정의한다. 이런 장애물을 회피하기 위해 Navigation Mesh가 필요하다.
Blackboard / Behaviour Tree / AI Controller / Pawn 의 관계
UCLASS와 USTRUCT의 차이? 각 매크로는 Reflection 시스템에 클래스와 구조체를 등록하는 데 사용한다 Unreal Editor가 사용자 정의의 클래스 또는 구조체를 인식하기 위한 방법이다 메모리 관리 시스템에 포함시켜 Garbage Collection할 수 있도록 한다 UHT(Unreal ...
Hard Reference
UObject UObject는 Unreal Engine에서 가장 기본이 되는 객체다 UCLASS 매크로 선언으로 UObject를 관리하는 시스템이 이를 인식한다 Reflection System을 통해 Garbage Collection을 수행하는 등의 역할 모든 언리얼 오브젝트는 실행 초기의 런타임 과정에서...
BT를 사용하는 인스턴스의 데이터 캐싱 AI 캐릭터들이 BT를 사용하면서, 인스턴스 별로 가져야 할 데이터가 있다 Target과의 거리를 기록해두어야 한다든가.. Timer를 재기 위해 체크하는 현재 남은 시간이라든가.. 즉, 캐싱(Cache)을 해야 하는 데이터가 있을 것이다
Class Default Object (CDO) 언리얼 오브젝트의 기본 세팅 상태를 지정 기본 탬플릿 오브젝트 Master copy UClass, 리플렉션 시스템에서 작동하기 위해 고안된 클래스에서 이 정보를 포함한다 C++ 언어 차원에서 제공하지 않는 리플렉션 기능을 위 방법을...
기본적인 Actor의 라이프 사이클
IK와 FK FK Rig Forward Knematics Parent가 움직이면 Child도 종속되어 애니메이션이 작동 팔꿈지를 위아래로 흔들면 손, 손가락도 따라 움직이는 원리
노드로 접기 블루프린트 노드를 디자인하다가 커다란 그래프를 하나로 묶어 정리하는 기능
Blueprint란? Unreal 엔진에 내장된 컴파일식 비주얼 스크립팅 시스템 하나의 프리팹 혹은 아키타입으로 정의하는 단위일 수도 있다
Unreal vs. Unity
언리얼에 매크로를 사용하는 이유 언리얼 C++ 코드는 Unreal Header Tool, UHT Preprocessor라 불리는 커스텀 RTTI를 사용한다 이런 매크로가 달린 코드는 일반적인 C++ 매크로와 달리 더 낮은 레벨에서 작동하며 관리된다 이 매크로들은 RTTI, Reflection 등 작동을 위해 메타 데이터를 생성한다