1 분 소요

📜시작


일단 마을 씬을 작성하면서 플레이어 이동을 구현해보기로 했다. 마을배경 스프라이트를 가져와 화면에 배치하고 플레이어 스프라이트 하나를 씬에 배치해보았다.

플레이어 이동 1

이제 여기서부터 플레이어 이동을 구현해나갈 생각이다.


📜입력부분


일단 기본적인 입력은 유니티의 Input Manager를 활용해 플레이어의 입력을 가져오기로 했다.

using UnityEngine;

public class PlayerInput : MonoBehaviour
{
    public float Horizontal { get; private set; }
    public float Vertical { get; private set; }

    void Update()
    {
        Horizontal = Input.GetAxisRaw("Horizontal");
        Vertical = Input.GetAxisRaw("Vertical");
    }
}

위 아래 입력을 프로퍼티로 설정하고 입력 값을 받는 건 클래스 내에서만 해주고 외부에서 접근해 플레이어의 이동을 구현할 생각이다. 현재는 이동관련 입력만 받아주지면 추후에 플레이어의 모든 인풋은 이 PlayerInput에서 다뤄 줄 예정이다.


📜이동부분


이제 입력을 받았으니 플레이어를 직접 이동시켜줄 스크립트를 작성할 것이다. 향후 플레이어는 각종 충돌현상도 구현해야하므로 BoxCollider2D와 RigidBody2D 컴포넌트도 추가해주었다. 그리고 플레이어의 직접적인 이동은 RigidBody2D의 MovePosition메서드를 활용해 이동시켜 줄 것이다.

using UnityEngine;

public class PlayerMovement : MonoBehaviour
{
    // Component.
    private PlayerInput _input;
    private Rigidbody2D _rigid;

    // A variable to store the player's coordinates.
    private Vector2 position;

    private float _moveSpeed = 1.2f;

    private void Awake()
    {
        // Get component reference.
        _input = GetComponent<PlayerInput>();
        _rigid = GetComponent<Rigidbody2D>();
    }

    void Update()
    {
        PlayerMove();
    }

    private void PlayerMove()
    {
        position = _rigid.position;
        position.x = position.x + _moveSpeed * _input.Horizontal * Time.deltaTime;
        position.y = position.y + _moveSpeed * _input.Vertical * Time.deltaTime;
        _rigid.position = position;
    }
}


📜동작확인


플레이상에서 잘 움직이는지 확인해보았다.

플레이어 이동 구현

의도한대로 잘 작동하는 것을 확인할 수 있었다.

댓글남기기