C# Rookiss Part3 유니티 엔진 : Position
🙇♀️Position
🪐플레이어 이동
if (Input.GetKey(KeyCode.W))
transform.position += new Vector3(0.0f, 0.0f, 1.0f);
if (Input.GetKey(KeyCode.A))
transform.position -= new Vector3(1.0f, 0.0f, 0.0f);
if (Input.GetKey(KeyCode.S))
transform.position -= new Vector3(0.0f, 0.0f, 1.0f);
if (Input.GetKey(KeyCode.D))
transform.position += new Vector3(1.0f, 0.0f, 0.0f);
- 한프레임마다 작동하니 매우 빠름
if (Input.GetKey(KeyCode.W))
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.S))
transform.position -= new Vector3(0.0f, 0.0f, 1.0f) * Time.deltaTime * _speed;
if (Input.GetKey(KeyCode.D))
transform.position += new Vector3(1.0f, 0.0f, 0.0f) * Time.deltaTime * _speed;
-
Time.deltaTime을 곱해주고 float 상수 _speed를 곱해주어 속도조절
-
Vector3.forward 사용
+= new Vector3(0.0f, 0.0f, 1.0f)
+= Vector3.forward
변환가능
-= new Vector3(0.0f, 0.0f, 1.0f)
+= Vector3.back
back는 +로 바꾸어야 함
🪐 월드, 로컬 좌표계
- 위에 코드들은 월드 좌표계
- 캐릭터가 바라보는 방향으로 가지 않음
- x, y, z 축이 기준
- transform.TransformDirection()
- 로컬 좌표에서 월드 좌표로 바꿈
- 캐릭터가 바라보는 방향으로 감
if (Input.GetKey(KeyCode.W))
transform.position += transform.TransformDirection(Vector3.forward * Time.deltaTime * _speed);
if (Input.GetKey(KeyCode.A))
transform.position += transform.TransformDirection(Vector3.left * Time.deltaTime * _speed);
if (Input.GetKey(KeyCode.S))
transform.position += transform.TransformDirection(Vector3.back * Time.deltaTime * _speed);
if (Input.GetKey(KeyCode.D))
transform.position += transform.TransformDirection(Vector3.right * Time.deltaTime * _speed);
- transform.InverseTransformDirection()
- 월드 좌표에서 로컬 좌표로 바꿈
🪐transform.Translate
- Translate
- TransformDirection을 사용하지 않고 바로 로컬로 계산
- +,-가 필요없음
- 방향과 거리를 모두 받음
- 벡터를 받는 함수
if (Input.GetKey(KeyCode.W))
transform.Translate(Vector3.forward * Time.deltaTime * _speed);
if (Input.GetKey(KeyCode.A))
transform.Translate(Vector3.left * Time.deltaTime * _speed);
if (Input.GetKey(KeyCode.S))
transform.Translate(Vector3.back * Time.deltaTime * _speed);
if (Input.GetKey(KeyCode.D))
transform.Translate(Vector3.right * Time.deltaTime * _speed);