진행한 것들

보스 Behaviour Tree와 애니메이션 연결

보스의 패트롤과 공격 부분을 애니메이션과 연결했습니다.

 

 

오늘의 이슈 / 내일 할 것

오늘 이슈

- 어제 한 BehaviourTree의 SetTree부분이 논리적으로 잘못 되어 다시 작성

https://jcdevelop98.tistory.com/379

 

DevLog - 이그라엘(IGRAL) Behaviour Tree와 SelectorNode

진행한 것들 보스 Behaviour Tree와 SelectorNode 이전에 이어서... https://jcdevelop98.tistory.com/378 DevLog - 이그라엘(IGRAL) Behaviour Tree와 Sequence Node 진행한 것들 보스 Behaviour Tree와 Sequence Node Behaviour Tree - 상태

jcdevelop98.tistory.com

public Dictionary<BTValues, object> BTDict { get; private set; } = new Dictionary<BTValues, object>();


private void Awake()
{
    _rigid = GetComponent<Rigidbody>();
    StatHandler = new EnemyStatHandler(enemySO, null, null);
    AnimationController = GetComponentInChildren<BossAnimationController>();
    AnimationController.Init();
}

protected override Node SetTree()
{
    InitBTDict();

    Node root = new Selector(new List<Node>
    {
        new Sequence(new List<Node>
        {
            new RunningCoolTimeNode(this),
            new CheckHpNode(this, PhaseSO.PhaseInfo.Length),
            new UpdatePhaseNode(this),
            new PatrolNode(this, _rigid, waypoints),
            new Selector(new List<Node>
            {
                new Sequence(new List<Node>
                {
                    new CheckSkillCoolTimeNode(this),
                    new UseSkillNode(this)
                }),
                new ShootNode(this, GameManager.Instance.PlayerTransform ,5)
            }),
        }),
        new DieNode()
    });

    return root;
}

public void SetCurrenPhase(int currentPhase)
{
    CurrentPhase = currentPhase;
}

private void InitBTDict()
{
    if (!BTDict.ContainsKey(BTValues.CurrentPhaseSkillCoolTime))
        BTDict.Add(BTValues.CurrentPhaseSkillCoolTime, 0f);

    if (!BTDict.ContainsKey(BTValues.WasSkillUsed))
        BTDict.Add(BTValues.WasSkillUsed, false);

    if (!BTDict.ContainsKey(BTValues.CurrentSkillElapsedTime))
        BTDict.Add(BTValues.CurrentSkillElapsedTime, 0f);

    if (!BTDict.ContainsKey(BTValues.IsAnyActionPlaying))
        BTDict.Add(BTValues.IsAnyActionPlaying, false);
}


문제점

이전에선 UseSkillNode 상태에 들어가지 못하는 버그가 있었음

원인

이전의 첫 번째 Sequence 부분에서 Failure 상태라면 바로 Root까지 반환하게 됨

해결

UseSkillNode과 ShootNode 상태를 SelectNode와 함께 CheckSkillCoolTimeNode로 판별하여 결과에 따라 하나를 수행하도록 함

추가 변경 사항

쿨타임 더하는 부분 로직 계산 부분 분리

- BTDict라는 딕셔너리를 만들어 여러 곳에서 쓰이는 변수들 저장

 

내일 할 것

- 애니메이션 버그 고치기(자꾸 두리번거림)

- 페이즈 1 스킬 구현 (폭탄 던지기)

 

오늘의 회고

 오늘은 보스 행동트리에 맞춰서 애니메이션을 적용하였다. 애니메이션 적용하는 것은 어렵지 않았지만 쿨타임을 계산한다던가 하는 부분을 위해 따로 BehaviourTree에서 프로퍼티로 접근할 딕셔너리를 만들기도 했다. 내일은 애니메이션 버그와 페이즈 1 스킬을 구현할 생각이다. 내일도 파이팅!

 

+ Recent posts