전체 글 116

[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
[인공지능 응용] CIFAR10 예제 공부하기

https://colab.research.google.com/github/pytorch/tutorials/blob/gh-pages/_downloads/4e865243430a47a00d551ca0579a6f6c/cifar10_tutorial.ipynb#scrollTo=f4krrQjVJkca cifar10_tutorial.ipynb Run, share, and edit Python notebooks colab.research.google.com Classifier(분류자) 학습시키기 먼저, 데이터에 대해 생각해보자. 일반적으로 이미지, 텍스트, 오디오 또는 비디오 데이터를 처리해야 할 때, 데이터를 numpy 배열로 로드하는 표준 python 패키지를 사용할 수 있다. 그런 다음 이 배열을 Torch로 변환..

수업내용 정리 2023.04.06
[UE4] 상태패턴으로 캐릭터 효율적 관리 구상해보기

언리얼에서 여러가지 다양한 애니메이션(스킬, 달리기, 구르기, 점프공격, 점프, 공격, 피격, idle, 죽음)을 연결하다보니 AnimBlueprint의 StateMachine을 사용하게 되었고, 캐릭터의 다양한 상태를 코드적으로 구현해 관리하면 애니메이션이나 다른 부분을 구현할때에도 도움이 되지 않을까 생각해서 구상해보기로 했다. 1. 순수가상클래스 State 정의하기. 먼저, 상태를 정의하는 State Class를 작성한다. // State.h #pragma once class AMyCharacter; class State { public: virtual ~State() {} virtual void Enter(AMyCharacter* Character) {} virtual void Update(AMy..

UE4 2023.04.05