2026-03-19 대시 메서드 진행중
This commit is contained in:
@@ -31,8 +31,9 @@ private void Awake()
|
||||
|
||||
private async Awaitable Start()
|
||||
{
|
||||
await LoadUserCharacters(1);
|
||||
await LoadPlayableCharacters();
|
||||
|
||||
//await LoadUserCharacters(1);
|
||||
//await LoadPlayableCharacters();
|
||||
}
|
||||
|
||||
public async Awaitable LoadUserCharacters(int userNo)
|
||||
|
||||
@@ -22,6 +22,7 @@ public class InputManager : MonoBehaviour
|
||||
public event Action<InputState> OnJumpEvent;
|
||||
public event Action<InputState> OnAimToggleEvent;
|
||||
public event Action<Vector2> OnLookEvent;
|
||||
public event Action<InputState> OnDodgeEvent;
|
||||
public event Action OnNormalAttackEvent;
|
||||
public event Action OnHeavyAttackEvent;
|
||||
|
||||
@@ -100,6 +101,7 @@ public void SetCharacterInputMap(string mapName)
|
||||
BindActionCharacter("Jump", OnJump);
|
||||
BindActionCharacter("AimToggle", OnAimToggle);
|
||||
BindActionCharacter("Look", OnLook);
|
||||
BindActionCharacter("Dodge", OnDodge);
|
||||
BindActionCharacter("NormalAttack", OnNormalAttack);
|
||||
BindActionCharacter("HeavyAttack", OnHeavyAttack);
|
||||
|
||||
@@ -189,6 +191,15 @@ private void OnLook(InputAction.CallbackContext ctx)
|
||||
Vector2 look = ctx.ReadValue<Vector2>();
|
||||
OnLookEvent?.Invoke(look);
|
||||
}
|
||||
|
||||
private void OnDodge(InputAction.CallbackContext ctx)
|
||||
{
|
||||
if(ctx.started)
|
||||
{
|
||||
OnDodgeEvent?.Invoke(InputState.Started);
|
||||
}
|
||||
}
|
||||
|
||||
private void OnNormalAttack(InputAction.CallbackContext ctx)
|
||||
{
|
||||
OnNormalAttackEvent?.Invoke();
|
||||
|
||||
@@ -104,6 +104,7 @@ public void OnSceneLoaded(Scene scene, LoadSceneMode mode)
|
||||
InputManager.Instance.OnJumpEvent += CurrentCharacterController.JumpInput;
|
||||
InputManager.Instance.OnAimToggleEvent += CurrentCharacterController.AimToggleInput;
|
||||
InputManager.Instance.OnLookEvent += CurrentCharacterController.LookInput;
|
||||
InputManager.Instance.OnDodgeEvent += CurrentCharacterController.DodgeInput;
|
||||
//InputManager.Instance.OnNormalAttackEvent;
|
||||
//InputManager.Instance.OnHeavyAttackEvent;
|
||||
|
||||
|
||||
@@ -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