Unity 강의 2일차 (3) - 주행 준비
본 강의는 다음 문서를 참고하여 제작하였습니다. 자세한 내용은 하단 링크를 참조하시거나 댓글로 질문 남겨주시면 성심성의껏 답변 드리겠습니다.
1.4강 - 주행 준비 - Unity Learn
개요: 이 수업에서는 주행을 시작하고 차량을 제어하게 됩니다. 이를 위해 플레이어가 화살표 키를 누르는 시점을 감지하여 해당 입력에 따라 차량을 가속하고 방향을 전환해야 합니다. 새로운
learn.unity.com
아무것도 게임에서 조작하지 않았는데 차가 움직였으니 좀 실망스러우셨을 것 입니다.
PlayerController 코드를 다음과 같이 수정합니다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerController : MonoBehaviour
{
public float speed = 5;
public float turnSpeed;
public float horizontalInput;
void Start()
{
}
void Update()
{
horizontalInput = Input.GetAxis("Horizontal");
transform.Translate(Vector3.forward * Time.deltaTime * speed);
transform.Translate(Vector3.right * Time.deltaTime * turnSpeed * horizontalInput);
}
}
float turnSpeed와 horizontalInput이 추가되었습니다. 이는 각각 회전속도와 평행축 입력, 즉 키보드의 좌우 방향 입력을 받기 위한 변수입니다.
그리고 Update 함수에서 horizontalInput은 Input의 GetAxis("Horizontal")을 이용하여 값을 변경해주고 있지요. 이는 매 프레임마다 방향키의 입력을 받아 방향키의 입력 방향에 맞는 horizontalInput 값을 받아주는 것 입니다.
그리고 transform.Translate로 좌우 벡터 값을 회전 속도와 축 입력값을 곱해서 변경하고 있죠.
눈에 띄지 않지만 스피드 값도 줄인 것을 확인하실 수 있습니다.
앞 입력값도 받아볼까요?
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerController : MonoBehaviour
{
public float speed = 5;
public float turnSpeed;
public float horizontalInput;
public float forwardInput;
void Start()
{
}
void Update()
{
horizontalInput = Input.GetAxis("Horizontal");
forwardInput = Input.GetAxis("Vertical");
transform.Translate(Vector3.forward * Time.deltaTime * speed * forwardInput);
transform.Translate(Vector3.right * Time.deltaTime * turnSpeed * horizontalInput);
}
}
이 부분에 대해선 추가적으로 설명하지 않겠습니다. 달라진 부분을 찾아보고 코딩해보는 것도 좋은 학습 방법이겠네요!
차를 움직이는데 너무 수직으로 움직이지요. 실제 차량은 이렇게 움직이지 않습니다.
좌우키를 누르면 좌우로 움직이는 것이 아닌 차량이 돌아가도록 수정해봅시다.
void Update()
{
horizontalInput = Input.GetAxis("Horizontal");
forwardInput = Input.GetAxis("Vertical");
transform.Translate(Vector3.forward * Time.deltaTime * speed * forwardInput);
transform.Rotate(Vector3.up, turnSpeed * horizontalInput * Time.deltaTime);
}
게임을 실행해보면 차량과 비슷해보이는 것을 확인할 수 있습니다!
하지만 컨트롤이 매우 어렵거니와 코드가 깔끔하지 않습니다.
다음과 같이 코드를 수정하고 이번 강의를 마치겠습니다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerController : MonoBehaviour
{
private float speed = 20.0f;
private float turnSpeed = 45.0f;
private float horizontalInput;
private float forwardInput;
void Start()
{
}
void Update()
{
horizontalInput = Input.GetAxis("Horizontal");
forwardInput = Input.GetAxis("Vertical");
transform.Translate(Vector3.forward * Time.deltaTime * speed * forwardInput);
transform.Rotate(Vector3.up, turnSpeed * horizontalInput * Time.deltaTime);
}
}