오늘 학습 키워드

최종 팀 프로젝트

오늘 학습 한 내용을 나만의 언어로 정리하기

플레이어 공격 만들기

public class NormalAttackState : IPlayerState  
{  
    private float startStateTime;  
    private float startAttackTime = 0.01f;  
    private float comboTime = 0.5f; // 콤보타임 지나서 누르면 의미없음.  
    private bool isComboInput = false;  
      
      
    public void Enter(PlayerController player)  
    {  
        startStateTime = Time.time;  
        isComboInput = false;  
        // AttackCount = 0 + NormalAttack Trigger On.  
        player.PlayerAnimator.ClearBool();  
        player.PlayerAnimator.SetTriggerAnimation(PlayerAnimID.NormalAttack);  
        player.Inputs.Player.Move.Disable();  
          
    }  
  
    public void HandleInput(PlayerController player)  
    {  
        // 키 입력이 필요  
        if (Time.time - startStateTime <= comboTime)  
        {  
            if (player.Inputs.Player.NormalAttack.triggered)  
            {  
                isComboInput = true;  
                  
            }  
        }  
    }  
  
    public void LogicUpdate(PlayerController player)  
    {  
        // Normalization Time = 1이면 => 애니메이션이 끝난 상태  
        // 애니메이션이 끝날 때까지 입력이 없으면 Idle로 넘어감  
        // 입력이 있으면 (0.5초 이내로) 다시 NormalAttackState로 변경  
        // 현재 진행 중인 애니메이션이 NormalAttack_(현재번호) 일 때  
        if (Time.time - startStateTime > startAttackTime)  
        {  
            AnimatorStateInfo curAnimInfo = player.PlayerAnimator.animator.GetCurrentAnimatorStateInfo(0);  
  
            if (curAnimInfo.IsName($"NormalAttack_{player.PlayerAttack.AttackCount+1}"))  
            {   
                float animTime = curAnimInfo.normalizedTime;  
  
                if (animTime >= 1.0f)  
                {  
                    if (player.PlayerAttack.AttackCount >= player.PlayerAttack.MaxAttackCount)  
                    {  
                        player.PlayerAnimator.ClearInt();  
                        player.ChangeState<IdleState>();  
                        return;  
                    }  
                    // 애니메이션 끝났음.  
                    if (isComboInput)  
                    {  
                        player.PlayerAttack.AttackCount++;  
                        player.PlayerAnimator.SetIntAniamtion(PlayerAnimID.NormalAttackCount, player.PlayerAttack.AttackCount);  
                        player.ChangeState<NormalAttackState>();  
                        return;  
                    }  
  
                    player.ChangeState<IdleState>();  
                    return;  
                }  
            }  
        }  
          
    }  
  
    public void Exit(PlayerController player)  
    {  
        isComboInput = false;  
    }  
}

콜라이더도 애니메이션으로 넣을 수 있다!!!!!!

  • 그래서 공격 히트박스를 애니메이션으로 넣음!!!! 진짜 대박

학습하며 겪었던 문제점 & 에러

문제 1

  • 문제&에러에 대한 정의

공격 액션이 끝난 후 상태는 Idle이 되었으나 공격 애니메이션 마지막 프레임에서 멈춰있었음

  • 내가 한 시도

입력을 막았으나 그래도 그랬음

  • 해결 방법

Has Exit Time을 꺼줬더니 되었다

  • 새롭게 알게 된 점 / 이 문제&에러를 다시 만나게 되었다면?

Transition Time이 0초여도 Has Exit Time을 꺼주자

문제 2

  • 문제&에러에 대한 정의

애니메이션에 콜라이더 조정했더니 좌우반전이 안됨

  • 내가 한 시도

머리를 싸맴

  • 해결 방법

scale x를 -1로 하면 뒤집힌다!!!!!