[Unity] 3D 죽림고수 만들기(1) - 플레이어
이번에는 직접 게임을 만들어보면서 게임 개발의 기본적인 요소를 배우려고 합니다. 첫 번째로 플래시게임 죽림고수를 모작하여서 3D게임으로 만들어보겠습니다.
죽림고수?
플레이어를 움직여 날아오는 화살을 피해 오래 버티는 것이 목적인 게임입니다.
이 게임을 3D로 구현해보겠습니다! 이번 글에서는 플레이어 조작을 만들어 보겠습니다.
플레이어 이동 구현
죽림고수는 플레이어가 이동하면서 화살들을 피하기 때문에 저희는 앞뒤 좌우로 이동할 수 있게 플레이어 이동을 구현해보겠습니다
public class PlayerController : MonoBehaviour
{
private float moveSpeed = 5;
private void Update()
{
Move();
}
void Move()
{
// 방향키 입력 받기
float hAxis = Input.GetAxisRaw("Horizontal");
float vAxis = Input.GetAxisRaw("Vertical");
// 이동 방향 구하기
Vector3 moveDir = new Vector3(hAxis, 0, vAxis).normalized;
// 이동
transform.Translate(moveDir.normalized * moveSpeed * Time.deltaTime);
}
}
플레이이가 방향키를 입력했을 때 움직일 수 있게 간단한 로직을 작성해 주었습니다.
플레이어 게임 오브젝트에 충돌을 처리할 CapsuleCollider와 Rigidbody를 추가하고 위에 작성한 PlayerController을 추가해 줍니다.
위에 화면처럼 플레이어가 이동하는 모습을 볼 수 있습니다.
카메라
저는 게임을 좀 더 긴박하게 하기 위해서 플레이어 시점을 1인칭으로 구현하겠습니다. 1인칭을 구현하려면 마우스를 움직였을 때 카메라가 회전하고 플레이어를 따라 다녀야 합니다.
public class CamraRotate : MonoBehaviour
{
[SerializeField] private GameObject player; // 플레이어 게임오브젝트
[SerializeField] private Transform cameraPos; // 플레이어 안에 있는 카메라 위치
private float turnSpeed = 4.0f; // 마우스 회전 속도
private float xRotate = 0.0f; // 내부 사용할 X축 회전량은 별도 정의 ( 카메라 위 아래 방향 )
// 카메라 이동은 LateUpdate에서
private void LateUpdate()
{
transform.position = cameraPos.position;
}
private void Update()
{
// 좌우로 움직인 마우스의 이동량 * 속도에 따라 카메라가 좌우로 회전할 양 계산
float yRotateSize = Input.GetAxis("Mouse X") * turnSpeed;
// 현재 카메라가 바라보는 방향에 회전 방향 값을 더해준다
float yRotate = transform.eulerAngles.y + yRotateSize;
// 위아래로 움직인 마우스의 이동량 * 속도에 따라 카메라가 위아래로 회전할 양 계산
float xRotateSize = -Input.GetAxis("Mouse Y") * turnSpeed;
// 위 아래 볼 수 있는 각도를 제한
xRotate = Mathf.Clamp(xRotate + xRotateSize, -45, 80);
// 카메라 회전량을 카메라에 반영
transform.eulerAngles = new Vector3(xRotate, yRotate, 0);
// 카메라 회전량을 플레이어 오브젝트에 반영 (Y 축만)
player.transform.eulerAngles = new Vector3(0, yRotate, 0);
}
}
카메라를 조작하는 로직을 작성하였습니다.
실제로 카메라가 위치할 곳을 플레이어 자식 오브젝트로 생성합니다. LateUpdate로 카메라 포지션을 오브젝트 포지션으로 대입해줘서 플레이어를 따라다니게 해주었습니다.
카메라를 셋팅하고 게임을 실행 시켜보겠습니다.
마우스가 움직였을 때 카메라가 회전하는 모습을 볼 수 있고, 위아래로 회전 할 수 있는 최대 각도가 설정되어있는 것도 볼 수 있습니다. 성공적으로 1인칭 카메라를 구현하였습니다.
이번 글에서는 플레이어를 움직이고 1인칭 카메라를 구현하였습니다. 다음에는 죽림고수에서 나오는 장애물인 화살을 구현하고 생성하는 시스템을 직접 만들어보겠습니다.