부트캠프/본캠프

[내일배움캠프_2025SEP19] OutCry 1차 프로토타입 QA 준비 완료

Young_A 2025. 9. 19. 22:48

목차

    OutCry 1차 프로토타입 QA 준비 완료

    오늘은 TIL을 늦게 쓰기 시작해서 한 일을 먼저 정리하고 시작!

    • 고블린 킹 일반 스킬 전부 마무리(오전 6종, 오후 3종 추가)
    • Tired 상태 추가 (체력 50% 미만 진입 시)
    • 스킬 인터벌 시간 조정. (특수 스킬 2초, 일반 스킬 1초)
    • 몬스터 등장 애니메이션 추가. (애니메이션 출력되는 동안 BT 멈추기)
    • 고블린 킹 특수 스킬 1 시작. (조건 맞추는 것까지 구현)

    브랜치 정리: 몬스터 스킬 6종 통합 마무리

    몬스터 스킬 브랜치들이 너무 많이 생성되어있어서 헷갈리고, 잘못 머지하려는 실수도 간혹 발생했다.

     

    현재 구현하는 보스 고블린 킹의 일반 스킬 총 6종을 마무리한 김에, 최종 점검 후 분업을 위해 생성했던 브랜치들을 전부 정리했다.

     

    다만 다음부터는 개발을 완료한 경우에는 간단한 QA를 개발자 본인이 진행한 후에 마무리한 당일 저녁 혹은 다음날 오전에 삭제하도록 프로세스를 정해야겠다는 생각이 들었다.


    BT의 장점: 유연성

    행동 로직 변경

    좌) 변경 전 우) 변경 후

    참고) OutCry에서 스킬이 종료 된 후 Idle 상태에서 기다리는 상태를 인터벌이라고 명명했다.

     

    이 인터벌 기간이 특수 스킬과 일반 스킬의 구분 없이 1초인 줄 알았는데,

    특수 스킬은 2초, 일반 스킬은 1초라는 걸 인지하였다.

     

    모든 스킬의 인터벌이 1초인 줄 알고 왼쪽 그림과 같이 모든 스킬들 중 하나를 진행하고 완료되어 SUCCESS를 반환했을 때 1초의 인터벌을 기다리게끔 구현하였다.

     

    기획팀에서 원하는 행동 트리를 구현하기 위해서는 수정이 필요했다.

    이미 BT로 구현하였기 때문에 간단했다.

    그냥 시퀀스 노드로 중간 레벨을 하나 더 추가해서 각 시퀀스마다 미리 구현해두었던 WaitActionNode을 추가하면 된다.

    기존의 WaitActionNode는 생성할때 매개변수로 기간을 받도록 이미 구현되어있어서 재사용하기만 하면 되었다.

    BT의 행동 중지

    몬스터 등장 애니메이션을 진행해야했다.

    등장하는 동안 모든 행동을 하지 않는다.

    처음에는 행동 트리에 어떤 상태를 정의해서 애니메이션 재생 기간에는 해당 행동으로 빠지게끔 RUNNING을 호출해야하나... 고민하였으나!

     

    그냥 BT를 중단하면 되었다.

    public abstract class MonsterAIBase : MonoBehaviour
    {
        private bool isAvailableToAct;
    
    	public void UpdateAI()
        {
            if (!isAvailableToAct)
                return;
            if (rootNode == null)
            {
                Debug.LogWarning("Root node is not assigned.");
                return;
            }
            NodeState state = rootNode.Tick();
        }
        public void DisactivateBt()
        {
            isAvailableToAct = false;
        }
    
        public void ActivateBt()
        {
            isAvailableToAct = true;
        }
    }

    위 MonsterAIBase 코드에서의 isAvailableToAct 변수와 DisactivateBT() 메소드를 Dead 상태를 구현하면서 이미 만들어두었다.

    ActivateBT 또한 미리 만들어 놨었는데 이걸 그대로 사용하면 된다.

     

    같은 코드에서 몬스터를 Initialize하는 코드가 있는데, 해당 코드에서 Spawn 애니메이션의 길이의 시간을 구하고 isAvailableToAct를 false로 선언해주었다.

     

    해당 애니메이션의 시간이 지나면 isAvailableToAct를 다시 True로 변경하면서 BT를 다시 재개해주었다.

    BT의 유지보수성은 최고다!

    위 두 사례를 통해 행동 트리의 장점인 유지보수성을 몸소 경험하게 된 셈이다.

    처음 설계할때는 조금 머리 아팠는데 구현한 게 정말 뿌듯하다.


    느낀점

    몬스터 구조를 설계하면서 새로운 몬스터를 진행하더라도 확장 가능하도록 신경을 진짜 많이 썼다!

    이번에 1차 프로토타입 업무를 마치고 새로운 몬스터 진행을 팀원 분이 진행하시기로 했는데 사용하시면서 칭찬을 해주셨다.

    몬스터 스킬들도 분업을 맡아주신 분들이 구조를 확장 가능하게 잘 짜신 것 같다는 말씀을 해주셔서 정말 보람을 많이 느꼈다.

    그래서 그런가 비록 간단한 스킬들이라도 해도 스킬 3개를 한 분이 오후 시간 동안 짜오셨고 무사히 병합되었다!

     

    그래서 저녁에는 기획팀이 주말 동안 QA를 하겠다길래 QA를 위한 QAScene을 셋팅해뒀다.

    나는 바로 다음 프로토타입에 포함될 특수 스킬1 작업에 착수했다.

    연출이 강조되어야할 부분들이라 여러 요소들을 고려하여 작업을 해야하지 않을까 싶다.


    내일 학습 할 것은 무엇인지

    현재 고블린 킹 애니메이터 상황이 이렇다.

    일반 스킬별로 모여있고, Run(RunStart/RunLoop/RunEnd)처럼 하나의 스킬에 단계별로 애니메이션이 분할되어있거나,

    Idle(idle/tired)처럼 상태를 나누어서 관리하게 되는 경우들을 SubState으로 묶어놨다.

     

    하지만 여전히 보기가 조금.. 복잡한 것 같아서 더 좋은 방법을 고민해보면 좋을 것 같다.

    물론 필수적인 요소는 아니니 당장 내일하겠다는 건 아니고 나중에 시간이 날 경우 해볼 것 같다.

     

     

    특수 스킬을 내일 내로 구현하여 일요일에 QA 및 버그 픽스를 한 뒤에 월요일에는 새로 분담되는 작업에 착수할 예정이다.