-
[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보다 크고, 체력이 변화할 때만 넉백이 되도록 조건문을 추가하여 해결했다.
'개발일지 > 스파르타 코딩클럽 부트캠프' 카테고리의 다른 글
[TIL] 15주차 2일 타임라인을 활용한 컷씬 제작 (0) 2024.07.23 [TIL] 14주차 5일 트러블슈팅 ( State가 많이 늘어나면서 생긴 문제들 ) (0) 2024.07.19 [TIL] 14주차 3일 기술면접 대비 (0) 2024.07.18 [TIL] 14주차 2일 기술면접 대비 C# 심화 문법 (0) 2024.07.17 [TIL] 13주차 5일 기술 면접 대비 ( 가비지 컬렉터, 박싱 언박싱 주의점 ) (0) 2024.07.16