728x90
반응형
2024.05.10 - [Coding/Unity] - [내일배움캠프 19일차 TIL] New Input System, 이벤트 처리
지금까지는 계속 Player Input component로 이벤트를 호출하는 방식을 사용했다.
그러다 저번에 Input System의 다양한 활용 방법을 배우고 나서 그중 C# 제너레이트 방식을 사용해봤다.
[ Input System C# 제너레이트 활용 ]
PlayerMove 메서드에 사용자의 입력을 받아서 플레이어를 움직이는 로직을 구현했다.
private void OnEnable()
{
input = new PlayerInput();
input.Player.Move.performed += PlayerMove;
input.Player.Move.canceled += PlayerStop;
input.Player.Jump.started += PlayerJump;
input.Enable();
}
private void PlayerMove(InputAction.CallbackContext value)
{
Vector2 curMovementInput = value.ReadValue<Vector2>();
Vector3 dir = transform.forward * curMovementInput.y + transform.right * curMovementInput.x; // transform: 방향, curMovementInput: 거리
dir *= 5;
dir.y = rigidbody.velocity.y; // 점프했을 때만 변화가 있도록 기본 값을 0으로 설정
rigidbody.velocity = dir;
}
하지만 performed임에도 WASD키를 누르면 일정 거리만 이동하고 멈추는 문제가 있었다.
private Vector2 curMovementInput;
private void FixedUpdate()
{
Vector3 dir = transform.forward * curMovementInput.y + transform.right * curMovementInput.x; // transform: 방향, curMovementInput: 거리
dir *= 5;
dir.y = rigidbody.velocity.y; // 점프했을 때만 변화가 있도록 기본 값을 0으로 설정
rigidbody.velocity = dir;
}
private void PlayerMove(InputAction.CallbackContext value)
{
curMovementInput = value.ReadValue<Vector2>();
}
그 이유는 입력을 한 번 받고 더 이상 반영되지 않기 때문이었다. 키가 눌렸을 때 한 번 움직이고, 그 이후로도 눌리고 있다면 계속해서 위치가 반영되어야 하는데 이 값이 변경되지 못했다.
움직임 코드에서 물리 계산이 이루어지기 때문에 FixedUpdate에서 실제 움직임 계산 로직을 구현하고, PlayerMove 메서드에는 입력 값을 받아오는 코드로 수정하면 계속해서 WASD 키를 누르고 있으면 연속적으로 움직인다.
private void PlayerStop(InputAction.CallbackContext value)
{
rigidbody.velocity = new Vector3(0, rigidbody.velocity.y, 0);
}
이번에는 WASD 키를 뗐는데 멈추지 않고 계속해서 움직이는 문제가 생겼다.
private void PlayerStop(InputAction.CallbackContext value)
{
curMovementInput = Vector2.zero;
rigidbody.velocity = new Vector3(0, rigidbody.velocity.y, 0);
}
실질적으로 움직임 좌표를 0으로 만들어주는 코드가 없었기 때문이었다.
따라서 속도를 0으로 만들어주는 코드 외에도 이동 좌표를 0으로 만들어주는 코드를 추가해서 움직임 자체를 확실히 멈추도록 한다.
728x90
반응형
'Coding > Unity' 카테고리의 다른 글
[내일배움캠프 48일차 TIL] 오브젝트 풀에서 큐의 동작 원리 (0) | 2024.06.24 |
---|---|
[내일배움캠프 46일차 TIL] JSON 직렬화로 데이터 저장, 불러오기 (0) | 2024.06.20 |
[내일배움캠프 42일차 TIL] 파티클 시스템, 애니메이션 이벤트, 사운드 (1) | 2024.06.14 |
[내일배움캠프 40일차 TIL] Input System 다이렉트, 임베디드, 액션 에셋, C# 제너레이트, Action Properties (0) | 2024.06.12 |
[내일배움캠프 38일차 TIL] 아이템 데이터 참조 에러 트러블 슈팅 (0) | 2024.06.10 |