TIL 9 | [Unity] 월드 좌표, 로컬 좌표 포지션 변환
너무 간만의 포스팅이다.ㅎㅎ
나 자신에게 변명하자면 유니티와 언리얼로 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);
}
Author And Source
이 문제에 관하여(TIL 9 | [Unity] 월드 좌표, 로컬 좌표 포지션 변환), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@soongeon/TIL-9-Unity-월드-좌표-로컬-좌표-포지션-변환저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)