플레이어 캐릭터에 천천히 걷기와 전력 질주를 추가했다.
위 두 기능을 추가 하면서 InputManager에 조작키 끼리 상호작용을 추가하고 상태에 따른 플레이어 이동속도 계산로직을 추가했다.
전력 질주를 하는 도중에 정조준 키를 누르면 전력 질주 키 입력을 끊는다거나 천천히 걷기를 하는 도중에 전력 질주 키를 누르면 천천히 걷기 키 입력을 끊는 방식의 상호작용을 추가했다.
// 키 상호작용
// ex) 달리다가 정조준하면 달리기 취소. 걷다가 달리면 걷기 취소
_adsAction.started += _ => _fastRun = false;
_fastRunAction.started += _ => { _fastRun = true; _walk = false; };
_fastRunAction.canceled += _ => _fastRun = false;
_walkAction.started += _ => { _walk = true; _fastRun = false; };
_walkAction.canceled += _ => _walk = false;
// TODO: Data에서 받아올 것
[SerializeField] private float moveSpeedBase = 2f;
[SerializeField] private float moveSpeedModifierSit = 0.5f;
[SerializeField] private float moveSpeedModifierFastRun = 2f;
[SerializeField] private float moveSpeedModifierWalk = 0.5f;
기본 이동 속도와 상태에 따른 Modifier들을 선언해줬다. 추후 Data파일에서 읽어오는 구조로 바꿀 생각이다.
public float MoveSpeedValue
{
get
{
float modifiers = 1f;
if (_input.Walk)
modifiers *= moveSpeedModifierWalk;
else if (_input.FastRun)
modifiers *= moveSpeedModifierFastRun;
if (_isSit)
modifiers *= moveSpeedModifierSit;
return modifiers * moveSpeedBase;
}
}
상태에 따른 Modifier들을 모두 곱한 후, 기본 이동속도와 곱해서 return해주는 프로퍼티를 작성했다.
_controller.Move(MoveSpeedValue * Time.deltaTime * movement);