[챗GPT로 코딩 공부] BT 기능 구현

내일배움캠프 수료생들은 챗GPT를 어떻게 개발 공부에 활용할까요?
Jul 09, 2024
[챗GPT로 코딩 공부] BT 기능 구현
✍🏼
챗GPT, 개발 공부에 있어서 든든한 친구 같은 존재이죠. 내일배움캠프의 수강생들도 혼자 공부할 때에는 챗GPT의 도움을 받고 있는데요. 오늘은 내일배움캠프 수료생들의 챗GPT 경험담을 보고, 여러분의 개발 공부에 적용해봅시다.

BT(Behavior Tree)

나는 최종 프로젝트 개발에서 많은 어려움을 겪었는데, 그때마다 Chat-GPT의 도움을 많이 받았다. 유니티 엔진 자체에서 제공하는 기능부터, 어떤 식으로 코드를 짜는 것이 좋은지 까지 참 많은 질문을 했다. 전부 풀기엔 너무 많고 그 중 하나를 뽑아보자면 BT(Behavior Tree)에 대해 가장 많은 질문을 한 것 같다.
BT에 대해 간단하게 설명하고 넘어가자면, 적 AI를 구현하는 방식 정도로 알아두면 좋을 것 같다. 우리 팀의 최종 프로젝트에는 보스 몬스터와 일반 몬스터가 존재했는데, 간단한 구조는 FSM으로 해결이 가능했지만, 캠프에서 배운 부분만 쓰는 것 보다 좀 더 도전적인 시도를 원해서 BT를 채용하게 되었다.
여기서 문제가 있었는데, BT의 경우 대부분이 Behavior Designer 같은 비주얼 스크립팅 패키지를 사용하거나, 아니면 아주 간단한 BT의 개념 정도만 짚고 넘어가는 사람들이 많았다는 것이다.
운 좋게 블로그 하나를 찾아 스크립트 작업 만으로 구현할 수 있는 BT를 배울 수 있었지만, 사용하는 것은 별개의 문제였다. 여기서 GPT를 사용하여 난관을 해결했다.

사용 예시

우선 BT의 노드 스크립트들을 혼자 분석해본 후, 애매하거나 모르는 부분을 조금씩 잘라 GPT에게 분석을 부탁했다. (모든 부분을 다 넣을 수 없으니 대표로 Composite 노드 스크립트에 대한 문답만 넣었다.)
질문 using myBehaviourTree; using System.Collections; using System.Collections.Generic; using UnityEngine; //행동 트리의 복합(Composite)노드를 구현하는 스크립트 namespace myBehaviourTree { public class BTComposite : BTBehaviour { //BTComposite 객체가 가지는 자식 노드들의 리스트 //==>복합 노드에 속한 자식 노드를 저장함 protected List<BTBehaviour> listChild; //자식 리스트 초기화 public BTComposite() { listChild = new List<BTBehaviour>(); } //특정 인덱스의 자식 노드를 반환함 public BTBehaviour GetChild(int index) { return listChild[index]; } //현재 복합 노드에 속한 자식노드의 개수를 반환함 public int GetChildCount() { return listChild.Count; } //모든 자식 노드들을 Reset하여 노드를 초기 상태로 돌림 public override void Reset() { for (int i = 0; i < GetChildCount(); i++) { GetChild(i).Reset(); } } //★새로운 자식 노드 추가 //List에 저장&순서 설정 //=>각 자식 노드에 부모 노드 설정(현재 BTComposite) public void AddChild(BTBehaviour newChild) { listChild.Add(newChild); //추가된 Child의 Index설정(순서니까 중요) newChild.SetIndex(listChild.Count - 1); //추가된 Chilid의 부모 설정 newChild.SetParent(this); } } }
 
GPT는 다음과 같이 깔끔하게 정리해 주었다.
이 코드는 행동 트리의 복합(Composite) 노드를 구현하는 스크립트입니다. 여러 자식 노드를 포함할 수 있는 BTComposite 클래스를 정의합니다. 주요 내용은 다음과 같습니다 listChild 필드: BTComposite 객체가 가지는 자식 노드들의 리스트를 나타냅니다. 생성자: BTComposite 객체가 생성될 때 자식 노드 리스트를 초기화합니다. GetChild() 메서드: 특정 인덱스의 자식 노드를 반환합니다. GetChildCount() 메서드: 현재 복합 노드에 속한 자식 노드의 개수를 반환합니다. Reset() 메서드: 모든 자식 노드들을 Reset() 메서드를 호출하여 초기 상태로 돌립니다. AddChild() 메서드: 새로운 자식 노드를 추가합니다. 이 메서드는 자식 노드를 리스트에 추가하고, 각 자식 노드에 대해 인덱스와 부모 노드를 설정합니다. 이 클래스를 사용하면 행동 트리의 복합 노드를 효과적으로 구현할 수 있습니다. 예를 들어, Selector(선택), Sequence(순차), Parallel(병렬)과 같은 다양한 복합 노드를 만들 수 있습니다.
이러한 답변을 통해 좀 더 확실하게 각 노드의 기능과 노드 내에 존재하는 메서드들이 어떤 역할을 하는지 알 수 있게 되었다. 메서드 중에서는 이해하기 어려운 재귀 함수와 같은 부분들도 섞여 있어서, 그러한 부분들은 따로 검색하여 공부하였다.
 
다시 GPT를 쓴다해도, 이 당시에는 BT에 대한 지식이 전무하여 똑같은 질문을 하지 않을까 싶다. 여기서 추가로 BT의 활용 방법이나 팁 같은 부분을 질문하여 보는 것도 좋을 듯 하다. (이 부분은 튜터님 도움을 더 많이 받았다.)
 

내일배움캠프가 여러분의 러닝메이트가 되어드리겠습니다

내일배움캠프의 많은 수강생들이 부트캠프 생활을 수료하고 현업에서 개발자로 활약하고 있습니다. 내일배움캠프는 모든 운영진이 교육, 특강, 12시간 밀착 케어, 찐한 관리, 인재 채용까지 열과 성을 다해 수강생들의 꿈을 지원하고 있습니다. 수많은 장애물을 넘을 수 있도록 내일배움캠프가 든든한 러닝메이트가 되어드리겠습니다. 내일배움캠프과 함께 여러분의 개발자 여정을 시작하세요.
 
 
CREDIT
글 | 우민규 내일배움캠프 수료생 편집 | 김진원 팀스파르타 객원 에디터
 
Share article
Subscribe to our newsletter
RSSPowered by inblog