본문 바로가기

▶Programming/Unity

transform

transform(변환) 은 오브젝트의 이동, 회전, 크기 를 담당.


transform.position: 단순하게 오브젝트의 위치를 이동. 간단하게 말해서 유니티의 플레이버튼을 눌렀을 때 정해진 위치로 이동함.

t

 

사용법: transform.position = new Vector3( 0, 4F, 0);  <- 새로운 위치좌표를 넣어주면 그 위치로 이동한다.


1줄요약: 오브젝트를 원하는 x,y,z값으로 변경 할거면 transform.position 아니면 x,y,z씩 이동 할거면 translate 


translate(이동): 위의 position이 단순히 오브젝트의 위치가 변하는 거라면,  translate는 move의 개념이 들어가 있는 것. 즉, 움직일 수 있게 해준다. 


예를 들어 transform.position = new Vector3( 0, 4F, 0); 를 Update 함수에 넣고 유니티 플레이 버튼을 누른다고 하자. 그러면 단순하게 값이 입력되기때문에 아무리 업데이트함수의 시간이 지난다고 해도 오브젝트의 좌표는 계속

0,4,0일 것 이다. 반면에 transform.translate는 transform.position += new Vector3( 0, 0,1); 이다. 다시 말하면 오브젝트의 기존 위치 값에 계속 값을 더해줘서 말그대로 "이동"을 시켜주는 함수이다. 


사용법: transform.translate(방향값,좌표계), transform.translate(float x, float y, float z, 좌표계)

여기서 방향값은 방향*크기 이므로 벡터 값이다. 좌표계는 필요에 따라 빼도 된다.

만약 여기서 좌표계를 Space.World로 하면 월드 좌표계를 바탕으로 캐릭터가 이동하게 되는데, 이는 캐릭터가 바라본 방향이 앞쪽이 아니므로 캐릭터가 이상하게 움직일 수 있다.




 transform.rotation 와 transform.Rotate 도 같은 개념이다.   transform.rotation에는 단순히 오브젝트의 회전값에 대한것이고 transform.Rotate가 +=의 개념이 들어 있어 update함수같은 곳에 넣어주면 회전하게 되는 것이다. 지금 오브젝트의 x,y,z의 회전값=transform.rotation


1줄 요약: 오브젝트를 원하는 x,y,z로 회전할거면 rotation  x,y,z씩 회전할거면 Rotate


transform.Rotate(0,30,) == (transform.rotation=Quaternion.Eular(0,30,0)) 

위의 코드는 서로 같다. Eular는 파라미터로 들어온 벡터의 오일러 값을 쿼터니언으로 바꿔주는 함수이다.

오른쪽 코드처럼 두번 고생할 필요없이 왼쪽에 코드를 쓰면 더욱 간편하게 사용 할 수 있다.


transform.localRotation: 자기 자신의 로컬좌표계에 해당하는 회전값. 나는 처음에 localRotation이라고 해서 자식의 회전값인줄 알았는데 그게 아니라 자기의 회전값은 맞는데 로컬에 따른 회전값. 쉽게 얘기해서 transform.eulerAngles 가 인스펙터에  보이는 값을 나타낸다면 localRotation은 숨은 값이라고 생각하자.