유니티 Input System을 활용한 캐릭터 이동 구현Unity/Study2023. 11. 24. 20:54
Table of Contents
📌 캐릭터 이동 구현
- 탑다운 시점으로 캐릭터 이동을 구현한다.
- W,A,S,D 조작으로 xy축 방향으로 자유롭게 이동한다.
📌 구현 목록
📄 PlayerMove.cs
private float speed = 5.0f;
void Update()
{
float x = Input.GetAxis("Horizontal");
float y = Input.GetAxis("Vertical");
transform.position += new Vector(x, y) * speed * Time.deltaTime;
}
- 기본적인 유니티 캐릭터 움직임 코드
- 그러나 게임 볼륨이 커질수록 이걸 효율적으로 관리할 수 있는 기능이 필요하다.
📄 TopDownCharacterController.cs
public event Action<Vector2> OnMoveEvent;
public event Action<Vector2> OnLookEvent;
// 움직이는 이벤트
public void CallMoveEvent(Vector2 direction)
{
OnMoveEvent?.Invoke(direction);
}
// 바라보는 이벤트
public void CallLookEvent(Vector2 direction)
{
OnLookEvent?.Invoke(direction);
}
- 플레이어의 Input에 따라 발동시키는 이벤트를 생성
- Vector2 값이 주어졌을때, 그 값에 따라 움직이거나 바라보는 기능을 호출할 수 있다.
🔧 Unity: Input System
- 패키지 매니저에서 InputSystem을 다운 받고, TopDownController2D로 지은 InputSystem을 하나 생성한다.
- 상단의 사진처럼 Move, Look, Fire 등 여러 상황에 대한 조작을 추가해서 기준을 만들어 둔다.
📄 PlayerInputController.cs
public class PlayerInputController : TopDownCharacterController
{
private Camera _camera;
private void Awake()
{
_camera = Camera.main;
}
public void OnMove(InputValue value)
{
Vector2 moveInput = value.Get<Vector2>().normalized; // 대각선 이동도 고정
CallMoveEvent(moveInput);
}
}
- PlayerInputController에서 입력처리 기능을 구현
- OnMove 매서드에서 InputSystem에 주어진 키 조작값에 따라 InputValue를 Vector2로 변환한 다음, 상속 받은 CallMoveEvent에 moveInput 값을 대입
📄 TopDownMovement.cs
public class TopDownMovement : MonoBehaviour
{
[SerializeField] private float speed = 4.0f;
private TopDownCharacterController _controller;
private Vector2 _movementDirection = Vector2.zero;
private Rigidbody2D _rigidbody;
private void Awake()
{
_controller = GetComponent<TopDownCharacterController>();
_rigidbody = GetComponent<Rigidbody2D>();
}
private void Start()
{
_controller.OnMoveEvent += Move;
}
private void FixedUpdate()
{
ApplyMovement(_movementDirection);
}
private void Move(Vector2 direction)
{
_movementDirection = direction;
}
private void ApplyMovement(Vector2 direction)
{
direction *= speed;
_rigidbody.velocity = direction;
}
}
- 플레이어 실제 움직임을 표현 하는 클래스
💡 결과 화면
'Unity > Study' 카테고리의 다른 글
유니티 Manager System (0) | 2023.12.05 |
---|---|
유니티 2D 공 충돌 물리엔진 (0) | 2023.11.30 |
유니티 NPC 간단 대화 시스템 (0) | 2023.11.28 |
유니티 타일 꾸미기 (0) | 2023.11.25 |
유니티 Input System을 활용한 캐릭터 회전 구현 (0) | 2023.11.25 |