ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [TIL] 14주차 4일 트러블슈팅
    개발일지/스파르타 코딩클럽 부트캠프 2024. 7. 18. 19:29

     

    여러가지 버그 수정

     

    이동중에 메인메뉴 UI 키면 계속 달리는 버그

    public virtual void Update()
    {
        Move();
        if (UIManager.Instance.onUI)
        {
            stateMachine.MovementSpeedModifier = 0f;
            StartAnimation(stateMachine.Player.AnimationData.IdleParameterHash);
        }
    }

    스테이트머신에 UI가 켜져있는 상태라면

    플레이어의 속도를 0으로 만들고, Idle상태로 돌아가게끔 설정하여 해결했다.

     

    스킬 사용중에 다른 스킬을 누르면 멈추는 버그

    체크포인트에 상호작용 시 모든 인풋이 안들어가게 하기

    protected virtual void AddInputActionCallbacks()
    {
        if(UIManager.Instance.onUI) return;
        if (GameManager.Instance.Player.isSkillActive) return;
    
        PlayerController input = stateMachine.Player.Input;
        input.PlayerActions.Movement.canceled += OnMovementCanceled;
        input.PlayerActions.Jump.started += OnJumpStarted;
        input.PlayerActions.Attack.performed += OnAttackPerformed;
        input.PlayerActions.Attack.canceled += OnAttackCanceled;
        input.PlayerActions.Dodge.started += OnDodgeStarted;
        input.PlayerActions.FirstSkill.started += OnFirstSkillStarted;
        input.PlayerActions.SecondSkill.started += OnSecondSkillStarted;
        input.PlayerActions.ThirdSkill.started += OnThirdSkillStarted;
        input.PlayerActions.SkillSlotSwap.started += OnSkillSlotSwap;
    }
    public void ChangeState(IState state)
    {
        if (UIManager.Instance.onUI) return;
        currentState?.Exit();
        currentState = state;
        currentState?.Enter();
    }

    두 문제는 onUI상태일 때는 아예 State가 바뀌지않도록, 하고 IsSkillActive가 true일 경우 인풋이 들어가지 않게하여 해결했다.

     

     

    죽고나서 부활할 때 Idle상태로 돌아가지 않는 부분

    public override void Update()
    {
        if(stateMachine.Player.isRespawn == true)
        {
            stateMachine.ChangeState(stateMachine.IdleState);
            stateMachine.Player.isRespawn = false;
        }
    }

     DeathState의 Update함수에 리스폰이 되었다면 Idle상태로 되돌리도록 설정

     

    플레이어 그라운드 체크용 레이 추가

    private void FixedUpdate()
    {
        stateMachine.PhysicsUpdate();
    
        if (Rigidbody.velocity.y < 0)
        {
            Vector2 leftRayOrigin = Rigidbody.position + Vector2.left * 0.3f;
            Vector2 middleRayOrigin = Rigidbody.position;
            Vector2 rightRayOrigin = Rigidbody.position + Vector2.right * 0.3f;
    
            Debug.DrawRay(leftRayOrigin, Vector2.down * 2f, Color.yellow);
            Debug.DrawRay(middleRayOrigin, Vector2.down * 2f, Color.yellow);
            Debug.DrawRay(rightRayOrigin, Vector2.down * 2f, Color.yellow);
    
            RaycastHit2D leftRayHit = Physics2D.Raycast(leftRayOrigin, Vector2.down, 2f, groundLayer);
            RaycastHit2D middleRayHit = Physics2D.Raycast(middleRayOrigin, Vector2.down, 2f, groundLayer);
            RaycastHit2D rightRayHit = Physics2D.Raycast(rightRayOrigin, Vector2.down, 2f, groundLayer);
            if (leftRayHit.collider != null && leftRayHit.distance > 0.5f)
            {
                isGrounded = true;
            }
            if (middleRayHit.collider != null && middleRayHit.distance > 0.5f)
            {
                isGrounded = true;
            }
            if (rightRayHit.collider != null && rightRayHit.distance > 0.5f)
            {
                isGrounded = true;
            }
        }
    }

    바닥이 인식이 안될 때가 있어서 ( 땅 모서리 접촉 시 ) 중간 지점에서 Vector2.left, Vector2.right를 통해 위치를 조금씩 조정하여 레이를 추가하였다.

     

    죽고나서도 몬스터와 접촉 시 넉백이 적용되는 버그 수정

    private void OnTriggerStay2D(Collider2D collision)
    {
        if (collision.tag == "monster" && !isEnemyDead)
        {
            enemyDamage = collision.gameObject.GetComponent<StatHandler>().CurrentStat.statsSO.damage;
            bool isChangeHealth = healthSystem.ChangeHealth(-enemyDamage);
            if(isChangeHealth && healthSystem.CurrentHealth > 0) OnHitKnockback(collision.transform.position);
            Debug.Log(healthSystem.CurrentHealth);
        }
    }

    몬스터와 충돌 시에 넉백이 일어나는 OnHitKnockback에 플레이어의 체력이 0보다 크고, 체력이 변화할 때만 넉백이 되도록 조건문을 추가하여 해결했다.

Designed by Tistory.