◾ 원래 Transform 찾으려면 GameObject > transfrom 찾았어야 했는데, 너무 많이 쓰다보니 transform 만 쳐도 나옴!
◾ 이동 구현하기
1. 가장 기본적인 방법 (월드 지표 기준이라 Rotation 을 틀었을 경우 따라가지 못함)
[SerializeField] float _speed = 10.0f;
if (Input.GetKey(KeyCode.W))
transform.position += new Vector3(0.0f, 0.0f, 1.0f) * Time.deltaTime * _speed;
if (Input.GetKey(KeyCode.S))
transform.position += new Vector3(0.0f, 0.0f, -1.0f) * Time.deltaTime * _speed;
if (Input.GetKey(KeyCode.A))
transform.position += new Vector3(-1.0f, 0.0f, 0.0f) * Time.deltaTime * _speed;
if (Input.GetKey(KeyCode.D))
transform.position += new Vector3(1.0f, 0.0f, 0.0f) * Time.deltaTime * _speed;
2. 월드 지표 기준을 로컬 지표 기준으로 바꾸기
if (Input.GetKey(KeyCode.W))
transform.position += transform.TransformDirection(Vector3.forward * Time.deltaTime * _speed);
if (Input.GetKey(KeyCode.S))
transform.position += transform.TransformDirection(Vector3.back * Time.deltaTime * _speed);
if (Input.GetKey(KeyCode.A))
transform.position += transform.TransformDirection(Vector3.left * Time.deltaTime * _speed);
if (Input.GetKey(KeyCode.D))
transform.position += transform.TransformDirection(Vector3.right * Time.deltaTime * _speed);
3. 그냥 Translate 사용하기
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);
4. Slerp 사용 시 월드 좌표 사용하기 (따로 함수화 해서 밑으로 빼기)
void OnKeyboard()
{
if (Input.GetKey(KeyCode.W))
{
transform.rotation = Quaternion.Slerp(transform.rotation, Quaternion.LookRotation(Vector3.forward), 0.2f);
transform.position += Vector3.forward * Time.deltaTime * _speed;
}
if (Input.GetKey(KeyCode.S))
{
transform.rotation = Quaternion.Slerp(transform.rotation, Quaternion.LookRotation(Vector3.back), 0.2f);
transform.position += Vector3.back * Time.deltaTime * _speed;
}
if (Input.GetKey(KeyCode.A))
{
transform.rotation = Quaternion.Slerp(transform.rotation, Quaternion.LookRotation(Vector3.left), 0.2f);
transform.position += Vector3.left * Time.deltaTime * _speed;
}
if (Input.GetKey(KeyCode.D))
{
transform.rotation = Quaternion.Slerp(transform.rotation, Quaternion.LookRotation(Vector3.right), 0.2f);
transform.position += Vector3.right * Time.deltaTime * _speed;
}
Manager 화 시켜서 누를 때 마다 작동하게 하기
void Start()
{
Managers.Input.keyAction -= OnKeyboard;
Managers.Input.keyAction += OnKeyboard;
}
InputManager _input = new InputManager();
public static InputManager Input { get { return Instance._input; } }
'Unity > 3d MMORPG' 카테고리의 다른 글
[Unity] Managers (0) | 2024.03.30 |
---|---|
[유니티] 3. (Ray 시각화하기) 공부 (0) | 2024.03.27 |
[유니티] 2. (Nav Mesh, static, Advanced) 공부 (0) | 2024.03.26 |
[유니티] 1. (Target, SerializeField) 공부 (0) | 2024.03.26 |