2026-03-19 대시 메서드 진행중

This commit is contained in:
2026-03-19 18:15:01 +09:00
parent b6b90e6ad6
commit 086034de23
29 changed files with 1061 additions and 89 deletions

View File

@@ -210,16 +210,14 @@ private void Movement()
//구르기중일때 전용 로직
if (_stateMachine.CurrentState == PlayerState.Dodge)
{
_dodgeTimer = _dodgeDuration;
Debug.Log("구르기중");
float normalizedTime = (_dodgeDuration - _dodgeTimer) / _dodgeDuration; // 0 ~ 1 사이의 진행률
if (normalizedTime >= 1.0f)
if (normalizedTime >= 1f)
{
Debug.Log("구르기 끝남");
// 구르기 종료 -> 원래상태로 복귀 로직
//StateMachine.ChangeState(PlayerState.Idle);
//_currentSpd = 0f;
_stateMachine.ChangeState(PlayerState.Idle);
return;
}
@@ -250,8 +248,6 @@ private void Movement()
_currentSpd = Mathf.MoveTowards(_currentSpd, targetSpd, currentStepSpeed * accelWeight * Time.deltaTime);
_anim.SetFloat("speedRatio", _currentSpd / _spdCoefficient);
Vector3 camForward = Camera.main.transform.forward; //메인카메라의 로컬기준 앞쪽방향
camForward.y = 0; //높이를 무시하기 위해 0으로
@@ -350,9 +346,11 @@ private void OnAnimatorMove()
}
private void ApplyMove()
{
//지상이동이 가능한 상황이 아니고, 공중이동도 가능한 상황이 아니라면
if (!_stateMachine.CanMove() && !_stateMachine.CanControlInAir())
//지상이동이 가능한 상황이 아니고, 공중이동도 가능한 상황이 아니라면, 또한 대쉬중도 아니라면
if (!_stateMachine.CanMove() && !_stateMachine.CanControlInAir() && !_stateMachine.CanDodge())
{
Debug.Log("aaaaaaaaaaaaaaaa");
_moveTargetDir.x = 0f;
_moveTargetDir.z = 0f;
}
@@ -377,6 +375,7 @@ private void TickTimer()
{
if (_jumpReadyCoolTimer > 0) _jumpReadyCoolTimer -= Time.deltaTime; if (_jumpReadyCoolTimer < 0) _jumpReadyCoolTimer = 0f;
if (_moveCutTimer > 0) _moveCutTimer -= Time.deltaTime; if (_moveCutTimer < 0) _moveCutTimer = 0f;
if(_dodgeTimer > 0) _dodgeTimer -= Time.deltaTime; ; if (_dodgeTimer < 0) _dodgeTimer = 0f;
}
#endregion
@@ -425,9 +424,51 @@ public void DodgeInput(InputState inputState)
// 입력이 없으면 카메라가 보는 앞방향, 있으면 입력 방향
_dodgeDir = _moveInput.sqrMagnitude > Mathf.Epsilon ? _moveTargetDir.normalized : camForward;
float angle = Vector3.SignedAngle(camForward, _dodgeDir, Vector3.up);
int dodgeAnimType = 0;
if (angle < 0) angle += 360f; // -180 +180 ==> 0~360
if ((angle >= 0f && angle < 22.5f) || (angle >= 337.5f && angle <= 360f))
{
dodgeAnimType = 0; //상 : Fwd 애니메이션
}
else if(angle >= 22.5f && angle < 67.5f)
{
dodgeAnimType = 0; //우상 : Fwd 애니메이션
}
else if(angle >= 67.5f && angle < 112.5f)
{
dodgeAnimType = 1; //우 : Right 애니메이션
}
else if (angle >= 112.5f && angle < 157.5f)
{
dodgeAnimType = 1; //우하 : Right 애니메이션
}
else if(angle >= 157.5f && angle < 202.5f)
{
dodgeAnimType = 2; //하 : Back 애니메이션
}
else if (angle >= 202.5f && angle < 247.5f)
{
dodgeAnimType = 3; //좌하 : Left 애니메이션
}
else if(angle >= 247.5f && angle < 292.5f)
{
dodgeAnimType = 3; //좌 : Left 애니메이션
}
else if(angle >= 292.5f && angle < 337.5f)
{
dodgeAnimType = 0; //좌상 : Fwd 애니메이션
}
//각도 따라 다른 애니메이션 재생
_anim.SetInteger("DodgeAnimType", dodgeAnimType);
_anim.SetTrigger("DodgeTrigger");
// 상태 전환 및 타이머 초기화
_stateMachine.ChangeState(PlayerState.Dodge);
_dodgeTimer = 0f;
_dodgeTimer = _dodgeDuration;
}
}
public void AimToggleInput(InputState inputState)