2026-03-19 대시 메서드 진행중
This commit is contained in:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user