본문 바로가기
UE5 : Paper 2D (Blueprint)/인공지능과 컨트롤러

[UE5 : Paper2D(BP) - 인공지능과 컨트롤러] Chapter 02. Controller

by song.ift 2024. 1. 9.

GitHub : https://github.com/developeSHG/UE5-Paper2D/commit/c9720e4b49f1bd1beba0892f876df25bb14dccd9

 

Controller · developeSHG/UE5-Paper2D@c9720e4

hokyung.song committed Jan 9, 2024

github.com

 

 


 

 

여태 플레이어나 몬스터라는 클래스 내부에다가 사진처럼 컨트롤하는 부분도 같이 넣어놨고, 그게 딱히 문제가 되진 않았다. 근데 경험이 쌓이고 복잡한 게임을 만들게 되면서 이렇게 직접적으로 나이트나 몬스터 클래스 안에다 입력까지 넣어놓는게 별로 좋은 코드가 아니란 걸 느꼈다.

왜냐하면 코드 양이 굉장히 방대해질수록 정말로 해당 클래스에 관련된 데이터만 넣고싶지. 인공지능이나 입력된 것 등등 잡다한 데이터가 포홤되면 관리가 굉장히 어려워지기 때문이다.

또한, 새로운 업데이트를 추가할 때도 함수에 계속 분기문을 이용해서 어떤 상태인지를 판별해서 만든다는 등 깔끔하지않다. 

 

결국 종속성이 강해져서 코드를 유연하게 바꿀수 없다라는 문제가 생긴다. 

그래서 경험이 쌓이면 별도의 클래스를 만들어서 독립적으로 관리해 서로 연관성을 낮추는게 좋다는 것을 알게 된다. 

즉, 플레이어 컨트롤러 혹은 몬스터 컨트롤러 라는 별도의 클래스를 뺴서 입력과 관련된 부분들 혹은 인공지능과 관련된 부분을 빼서 관리하는 게 효율적이다. 

 

언리얼 엔진도 장점이자 단점인 모든것이 어느정도 규격이 잡혀있듯, 컨트롤러로 빼서 관리하는 경우가 많다. 

 

플레이어 컨트롤러란

폰이랑 게임을 하는 사람이 조종하는 것에 연결해주는 인터페이스다. 

언제 사용해야 되느냐? 모든 입력들을 폰 내에서 처리해도 괜찮다. 아까처럼 플레이어에 모든 인풋들을 처리해서 관리하는 게 괜찮다라는 것이다.

하지만, 조금 더 복잡해졌을 때 예를 들면 멀티플레이어 게임이라거나 플레이어가 바뀌어 입력하는 상태가 완전히 바뀌어아 된다거나 등등의 케이스가 있다고 하면 플레이어 컨트롤러에서 입력을 받아 처리하는 게 훨씬 효율적이다. 

 

 

그래서 할 것은 나이트 클래스에 넣어놨던 이벤트 입력하는 Update Input을 플레이어 컨트롤러에 이전해볼것이다.

게임모드 오버라이드 쪽에서 방금 만들어준 게임 모드로 교체할 수 있다. 그러면 Default Pawn, HUD, Player Controller 등 모든 것이 다 기본 상태로 되어있는데 이것을 하나씩 교체를 해줄 수가 있다. 

Player Controller가 기본으로 만들어져 있는데, 이것을 상속을 받아서 나만의 방식으로 대체해줄수가 있다. 

 

그러면 이제 새로운 플레이어를 만들어서 나이트라는 플레이어가 조종이 될 때, 기본 플레이어 컨트롤러가 아닌 BP 플레이어 컨트롤러가 만들어질 것이고, 

나이트 클래스 안에 있는 Update Input 코드를 새로운 플레이어 컨트롤러에다 이전을 시켜서 관리하는 게 하나의 방법이 될 수 있다. 

 

그리고 플레이어 컨트롤러뿐만 아니라, 인공지능에 의해 스켈레톤을 움직이고 있는데 스켈레톤도 AI 컨트롤러라는 개념이 있다. 자주 사용하지 않아 Common에는 없지만, 검색하면 나온다.

 

만든 Player Controler를 통해 제어하면, 예전에 플레이어를 배치한 다음 디테일 가서 포세스 0번을 선택해야 되었는데, 그 부분을 굳이 하지 않아도 기본 세팅에 의해서 자동적으로 플레이어가 하나 만드러진 후, 해당 플레이어를 선택하게 된다.

댓글