Unity_2기 내일배움캠프 TIL

Unity_2기 8주차 (231228)

잼잼재미 2023. 12. 28. 09:50

내일의 개인과제 제출을 위해 계속 작업을 했다.

 

트러블 슈팅


1. Enemy -> Player 피격 오류

 

위와 같이 Player가 공격 시, Enemy 체력은 떨어지지만, Enemy가 아무리 공격을 해도 Player의 체력은 변함이 없다.. (빨간색 캐릭터가 Player) 유니티 심화주차 강의를 보고 FSM 형식으로 구현한 것인데 코드도 거의 유사했고, Player, Enemy 코드 둘 다 비슷한 코드를 사용하기때문에 도저히 어디서 문제가 일어나는건지 찾을 수가 없었다. 위 버그 때문에 5시간을 고민했다.

 

 

 

처음에는 코드에 문제가 있는줄 알고 거의 처음부터 모든 스크립트를 훑어본 것 같다. 하지만 해결이 되지 않았고, 에셋이 문제인건가.. 아니면 사용하지않던 터레인을 사용해서 그런가.. 100가지 정도 경우의 수를 생각해봤지만 답이 나오지 않았다. 디버깅을 통해 콜라이더와 Player가 접촉하지 않는다는 것을 알게되었다. 하지만 콜라이더를 막상 또 확인을 하니 잘 만들어져 있었다. 또 다시 원점으로 돌아가는 듯 했으나, 위 사진 처럼 콜라이더가 검을 휘두를 때 순간적으로 잠깐 나타났다가 검이 Player와 접촉할 때 쯤은 콜라이더가 없는 것을 확인했다. 정말 순식간에 나타났다가 없어졌기 때문에 눈으로 확인하기 어려워서 찾을 수가 없었던 것이다.

 

 

float normalizedTime = GetNormalizedTime(stateMachine.Enemy.Animator, "Attack");
if (normalizedTime < 1f)
{
    if (normalizedTime >= stateMachine.Enemy.Data.ForceTransitionTime)
        TryApplyForce();

    if (!alreadyAppliedDealing && normalizedTime >= stateMachine.Enemy.Data.Dealing_Start_TransitionTime)
    {
        stateMachine.Enemy.Weapon.SetAttack(stateMachine.Enemy.Data.Damage, stateMachine.Enemy.Data.Force);
        stateMachine.Enemy.Weapon.gameObject.SetActive(true);
        alreadyAppliedDealing = true;
    }

    if (alreadyAppliedDealing && normalizedTime >= stateMachine.Enemy.Data.Dealing_End_TransitionTime)
    {
        stateMachine.Enemy.Weapon.gameObject.SetActive(false);
    }

}

 

EnemyAttackState 스크립트 부분인데, stateMachine.Enemy.Data.Dealing_Start_TransitionTime에서 콜라이더가 켜지고 stateMachine.Enemy.Data.Dealing_End_TransitionTime에서 콜라이더가 꺼지도록 구현했다.

 

 

 

EnemySO가 위 처럼 설정되어있어서 0.1초만에 콜라이더가 나타났다가 사라진 것이다. Player가 Enemy를 공격할 때는 Player는 콤보공격이 있기때문에 이 부분이 조금 다르게 설정되어 있어서 Player는 콜라이더가 Enemy와 충분히 충돌할 수 있도록 설정되어있었다. 

 

 

 

위 EnemySO 값은 강의 영상과 동일한데,강의에서는 잘 작동이 된 것은 공격 애니메이션 자체가 빨라서 콜라이더가 생성되는 0.1초만에 충분히 Player와 충돌하기 때문이다. 즉, 애니메이션에 따라 Dealing_Start_TransitionTime, Dealing_End_TransitionTime 값을 새로 설정해줘야 한다. 

 

 

 

그래서 EnemySO에서 값을 콜라이더가 Player와 충분히 충돌할 수 있도록 수정했다.

 

 

 

이렇게 간단한 문제를 어렵게 생각해서 버그 수정이 오래걸렸지만, 피격이 잘 작동하는 모습이다!

 

 

오늘의 회고


항상 느끼는 것은 머리속에 구현하고 싶은 욕심은 엄청 많은데 정작 1개를 구현하는데 최소 1~2시간이라는 것이다. 이번 개인과제도 개인적으로 적의 스킬 사용, Player 회피 스킬, 아이템 등 여러가지 구현하고 싶었으나 제출 기한을 맞추기 위해 1:1 배틀까지만 구현하고 마무리했다. 아직까지 개발 레벨이 많이 높지않아서 막히는 부분이 많아서 그런 것 같다. 그리고 오늘 느낀 새로운 교훈은 '애니메이션은 누군가가 만들어 놓은 것을 사용하자...' 이다. Player의 스킬을 구현할 애니메이션이 부족해서 다른 캐릭터의 애니메이션을 사용했는데 정말 힘들게 스킬 구현을 마쳤지만 애니메이션 오류인지 스킬을 사용할 때 마다 발에서부터 조금씩 땅 속으로 들어가는 버그를 발견했다.. 애써서 몇시간동안 구현했는데 제일 마지막이 해결할 수 없는 버그라서 맥이 너무 빠졌다. 결국 기존 사용했던 애니메이션을 사용해서 스킬구현을 했지만 정말 큰 또 다른 교훈을 얻었다.

'Unity_2기 내일배움캠프 TIL' 카테고리의 다른 글

Unity_2기 9주차 (230102)  (0) 2024.01.02
Unity_2기 8주차 (231229)  (1) 2023.12.29
Unity_2기 8주차 (231227)  (1) 2023.12.27
Unity_2기 8주차 (231226)  (1) 2023.12.26
Unity_2기 7주차 (231222)  (0) 2023.12.22