#01 문라이터 모작 - 플레이어 이동
📜시작
일단 마을 씬을 작성하면서 플레이어 이동을 구현해보기로 했다. 마을배경 스프라이트를 가져와 화면에 배치하고 플레이어 스프라이트 하나를 씬에 배치해보았다.
이제 여기서부터 플레이어 이동을 구현해나갈 생각이다.
📜입력부분
일단 기본적인 입력은 유니티의 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;
}
}
📜동작확인
플레이상에서 잘 움직이는지 확인해보았다.
의도한대로 잘 작동하는 것을 확인할 수 있었다.
댓글남기기