When?인공지능의 행동 양식을 구현할 때 사용한다. Why?간단한 행동양식인 경우에는 각 FSM과 같이 State를 이동하며, 행동양식을 만들 수 있다.하지만 복잡한 행동양식인 경우에 State가 많아질수록 기하급수적으로 복잡해진다는 단점이 있다.이를 해결하기 위해, Tree형태로 행동양식을 결정하는 Behavior Tree가 등장했고, 유지보수에 강한 장점이 있다. How?AIController 내부에는 BrainComponent와 BlackBoardComponent가 준비되어 있다.BrainComponent는 BehaviorTree의 부모로, RunBehaviroTree() 에서 BTComp와 BBComp가 NewObject를 통해 만들어진다.두 Component의 내부에는 당연히도 BT와 BB..
When?인공지능을 통해 Actor가 목표 지점으로 길찾기를 할 때 쓰인다. Why?Actor가 목표 지점으로의 길을 찾아야 할 때, 어떤 길, 어떤 경사로 등 다양한 조건들을 체크할 수 있어야 한다.Actor의 높이나, 넓이에 따라 선택적으로 길을 찾을 수 있어야 하며, 지형 정보에 따라 선호하는 길을 찾을 수 도 있어야 한다.이런 것을 NavMesh를 통해 구현할 수 있으며, 이는 Detour & Recast Library를 Unreal에 통합하여 Engine에서 지원하는 것으로 보인다. How?1. NavMesh Bounds Volume먼저 어떤 길에 NavMesh를 생성하려면 어디서부터 어디까지 생성할지 범위에 대한 지정이 필요하다.그것을 NavMesh Bounds Volume을 통해 지정할 ..
When?Animation Graph에서의 작업의 효율성과 프레임워크를 부여할 때 사용한다. Why?Shooter Game에서 Pistol, Rifle, Unarmed 등 다양한 상태가 존재하고, 이들 하나하나에 대한 분기를 Editor상에서 작성하다보면, 점점 더러워질 뿐더러, 어디서 뭐가 어떻게 작동하는지 파악하기 힘들다.더불어, 새로 추가되는 상태가 있다면 그에 대해 어떤 작업을 해줘야 하는지 기억하기 어렵고, 빼먹기 쉽다.Linked Animation Layer를 이용하여, 위의 문제점들을 해결할 수 있다. How?1. Animation Layer Interface를 만들어준다.어떠한 행동, 기능을 설명하는 Layer를 정의한다.여기서 외부에서 받은 Input Pose, Variable들을 정..
When?어떤 기능이 한 클래스의 상속 구조에 적합하지 않고, 같은 부모를 가지지 않는 여러 클래스들이 가질 수 있는 기능이어야 할 때, 쓰인다. Why?Interact라는 기능을 생각해보자.Actor 돌맹이도 Interact할 수 있고, Character NPC와도 Interact할 수 있다.만약 상속구조에 이 기능을 넣게 된다면, 중복해서 같은 기능을 가지는 Code를 추가해야 할 것이다. How?Basicclass UBN_LevelChangeable : public UInterface{ GENERATED_BODY()};class PROJECTBN_API IBN_LevelChangeable{ GENERATED_BODY()public: UFUNCTION(BlueprintCallable, Bluepr..
]: When?Unreal Source의 생성자에서 심심찮게 볼 수 있는 친구다.부모 Class에서의 DefaultSubObject의 Type을 바꾸고 싶거나, 아예 생성하고 싶지 않을 때, 사용할 수 있다. ]: Why?상속의 과정에서 어떤 Derived Class는 부모의 SubObjectClass를 확장한 SubObject를 사용하고 싶거나, 아예 Object 자체를 생성하고 싶지 않은 경우가 있을 수 있다.예를 들어, ACharacter의 CharacterMovement Component는 ACharacter의 SubObject로 Custom Engine Build가 아닌 이상 저 부분을 건드릴 수 있는 방법은 없다.하지만 CharacterMovement를 확장한 Component로 해당 부분을..
]: When?Player Input에 따른 Action을 수행할 때, 사용한다. ]: Why?이전 Unreal InputSystem이었던 BindAxis에서 유연한 입력에 대한 처리에 대한 필요성으로 인하여, Enhanced Input이 등장했다.Platform간의 입력에 대한 전환도 유연하게 할 수 있다.Trigger Option으로 아래와 같은 Chorded Action을 통해 복합 키 입력에 대해 대응이 가능하다. ]: How?}: Input ActionInput Action은 ValueType, Trigger, Modifier로 구성된다.Value Type : 입력에 대한 반환 값이, 어떤 Type일지 결정한다. bool, Vector1,2,3d가 지원된다.Trigger : 입력에 대해서,..
]: When?GameplayTag를 C++에서 변수명으로 사용하고 싶을 때, 사용한다. ]: Why?Editor에서 GameplayTag를 등록하면, ini file에 등록된다.C++에서 어떤 Tag에 대해 사용하려면 그 식별자를 알아야 하며, 문자열의 형태로 사용해야한다.이는 하드코딩이며, 만약 Tag의 이름이나 구조가 변경되었을시에, 많은 부분의 코드 수정이 필요할 수 있다.이를 방지하기 위해, C++에서 고정적으로 사용할 GameplayTag에 대해서 Native Tag로 만들어 변수에 할당하고 사용한다. ]: How?// headerstruct FSH_GameplayTags{ static const FSH_GameplayTags& Get(){return GameplayTags;} static..