GameObject 의 transform 을 조작하기 위해 해당 Object에 PlayerController.cs 스크립트를 연결하여 코드를 구현한다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerController : MonoBehaviour
{
[SerializeField]
float _speed = 3.0f;
void Start()
{
}
// GameObject (Player)
// Transform
// PlayerController (*)
// Transform 의 위치를 변경시켜야 하는데 자주 사용하기 때문에 transform 바로 사용
void Update()
{
if (Input.GetKey(KeyCode.W))
transform.position += Vector3.forward * Time.deltaTime * _speed;
if (Input.GetKey(KeyCode.S))
transform.position += Vector3.back * Time.deltaTime * _speed;
if (Input.GetKey(KeyCode.A))
transform.position += Vector3.left * Time.deltaTime * _speed;
if (Input.GetKey(KeyCode.D))
transform.position += Vector3.right * Time.deltaTime * _speed;
//transform
}
}
- Transform.positon 의 값을 Vector3. 메소드로 수정한다. - Update 함수에서는 Frame 마다 수행되기 때문에 Frame rate가 달라진다면 부자연스러운 움직임이 발생 -> Time.deltaTime을 곱하여 일정하게 유지하여 Frame rate 에 독립적인 동작을 구현할 수 있음 - _Speed 변수를 사용하여 속도를 조절할 수 있도록 함. -> public 으로 사용할 변수가 아니기 때문에 SerializeField 를 사용하여 프라이빗 필드를 인스펙터에 노출하여 수정할 수 있음.
해당 스크립트를 GameObject에 연결하면 Speed를 조절할 수 있고, 테스트 시 wasd 로 이동이 가능하다.
2. 좌표
- world 좌표 -> 게임세상좌표 - local 좌표 -> GameObject (Player) 기준좌표
TransformDirection : local 좌표를 기준으로 world 좌표로 변환 ( Player 방향을 기준으로 이동 ) InverseTransformDirection : world 좌표를 기준으로 local 좌표로 변환
보통 게임에선 TransformDirection 으로 Player 가 바라보는 방향으로 움직이게 되어 있음 -> transform.Translate 함수 이용
void Update()
{
if (Input.GetKey(KeyCode.W))
transform.Translate(Vector3.forward * Time.deltaTime * _speed);
if (Input.GetKey(KeyCode.S))
transform.Translate(Vector3.back * Time.deltaTime * _speed);
if (Input.GetKey(KeyCode.A))
transform.Translate(Vector3.left * Time.deltaTime * _speed);
if (Input.GetKey(KeyCode.D))
transform.Translate(Vector3.right * Time.deltaTime * _speed);
//transform
}