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

@@ -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)

View File

@@ -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();

View File

@@ -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;

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)