TIL 9 | [Unity] 월드 좌표, 로컬 좌표 포지션 변환

1917 단어 Unity3dUnity3d

너무 간만의 포스팅이다.ㅎㅎ
나 자신에게 변명하자면 유니티와 언리얼로 AR/VR을 만드는 회사에 취업하게 되어서 시간이 없었다랄까...
아무튼 그래서 포스팅을 쉬는 동안에는 C#과 유니티를 공부했다.
그렇지만 웹(프론트)를 놓을 생각은 없기에 앞으로는 TIL에 C# 유니티와 프론트에 관한 내용들을 천천히 올려볼 생각이다.

월드 좌표계와 로컬 좌표계란?

월드 좌표란 세상을 중심으로 어떤 객체가 어느 위치에 있고, 세상을 기준으로 x,y,z축의 방향이 결정되는 것을 말한다.
로컬좌표란 나 혹은 어느 한 오브젝트를 중심으로 어느 위치에 있는지를 결정하고 x,y,z축의 방향이 결정되는 것을 말한다.

좌표에 따른 포지션 변환

오브젝트를 조작할 때 월드좌표에 따라 움직이는 물체는 로테이션 값이 변하게 되면 유저의 의도와는 다르게 움직일 수 있다. 이 때문에 로컬좌표의 축에 맞게 움직이게 맞춰줘야하는 경우가 있는데 그때 게임수학과 행렬을 이용해서 맞춰줄 수 있지만, 이미 만들어저 있는 기능이 있는데 그럴 필요는 없다.

// Local => World
// TransformDirection
// World => Local
// InverceTransformDirection

// 예시 코드
if (Input.Getkey(Keycode.W)
{
	transform.position += transform.TransformDirection(Vector3.forward * Time.deltaTime * _speed);
if (Input.Getkey(Keycode.S)
{
	transform.position += transform.TransformDirection(Vector3.forward * Time.deltaTime * _speed);
if (Input.Getkey(Keycode.A)
{
	transform.position += transform.TransformDirection(Vector3.forward * Time.deltaTime * _speed);
if (Input.Getkey(Keycode.D)
{
	transform.position += transform.TransformDirection(Vector3.forward * Time.deltaTime * _speed);
}

또한 단순히 캐릭터 조작이 목적이라면 처음부터 로컬좌표로 제공하는 Translate라는 메소드도 있다.

if (Input.Getkey(Keycode.W)
{
	transform.position += transform.Translate(Vector3.forward * Time.deltaTime * _speed);
if (Input.Getkey(Keycode.S)
{
	transform.position += transform.Translate(Vector3.forward * Time.deltaTime * _speed);
if (Input.Getkey(Keycode.A)
{
	transform.position += transform.Translate(Vector3.forward * Time.deltaTime * _speed);
if (Input.Getkey(Keycode.D)
{
	transform.position += transform.Translate(Vector3.forward * Time.deltaTime * _speed);
}

좋은 웹페이지 즐겨찾기