[내일배움캠프] AI 피하기 - 1

김세희·2025년 5월 19일
post-thumbnail

1. 오늘 배운 개념 요약

레벨에 AI 캐릭터를 스폰하고 플레이어 캐릭터가 닿으면 Dead, 이후 R키로 재시작하는 로직 구현. 각 상황별 위젯을 만들고 게임모드에 로드, 언로드 함수를 만들었다.

2. 구현 과정

1. 플레이어만 들어갈 수 있는 쉴드 만들기

커스텀 오브젝트 콜리전 채널인 PlayerCharacter를 생성하고 플레이어 캐릭터의 콜리전 오브젝트 타입을 PlayerCharacter로 설정했다. 쉴드의 콜리전을 PlayerCharacter만 Overlap을 허용하고 나머지는 모두 Block으로 설정해 AI 캐릭터의 출입을 막았다. AI의 Behaviour Tree에서 플레이어가 시야에 있는지 확인하는 데코레이터에서도 라인트레이스를 이용해 플레이어가 쉴드 안에 있을 때는 False를 출력하게 했다.

2. 플레이어가 죽을 때 위젯이 계속 ADD 됨

원인: 플레이어 캐릭터가 죽어도 AI에 부딪힐 때마다 Hit 판정이 됨
해결: IsDead라는 변수를 추가해 처음 죽었을 때 True로 변경하고 변수 값이 False일 때만 위젯 추가

3. 게임모드에서 레벨을 언로드해도 스폰한 AI가 사라지지 않음

원인: 런타임에 스폰된 경우 언로드와 관계없이 남아 있음
해결: AI를 스폰할 때 Add Unique로 Tag를 추가해 레벨 언로드 전에 해당 태그를 가진 액터들 삭제

4. 레벨 재시작 시 캐릭터가 이전 위치에 생성되고 랙돌 상태가 리셋되지 않음

원인: 레벨을 로드해도 플레이어는 리셋되지 않음
해결: 레벨 언로드 후 플레이어 캐릭터를 Destroy하고(언로드 중 플레이어를 없애면 그 뒤 프로세스 실행 안됨) 레벨을 불러올 때 Beginplay에서 플레이어 캐릭터를 스폰하고 컨트롤러를 빙의시킨다.게임모드에서 자동으로 플레이어를 스폰하지 않도록 DefaultPawnClass를 None으로 설정했다.

5. AI끼리 부딪히면 못 움직임

원인: AI의 콜리전/물리/네비게이션 문제
해결: AI 캐릭터 무브먼트의 RVO Avoidance 켜기

3. 느낀 점 & 개선하고 싶은 점

플레이어가 죽었을 때 로직은 만들었지만 게임을 클리어하는 조건을 자세히 정하지 않았고 맵도 아주 작은 부분만 만들어놔서 아직 미완성이다 :(

0개의 댓글