🙇‍♀️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);

태그:

카테고리:

업데이트: