유니티를 비롯한 대부분의 게임 엔진에서는 오브젝트의 위치와 방향을 나타내기 위해 좌표계를 사용합니다. 유니티에서는 기본적으로 x축(좌우), y축(높낮이), z축(앞뒤)으로 이루어진 3차원 직교 좌표계를 사용합니다.
현실에서 물체의 위치를 나타내기 위해서는 기준점이 필요합니다. 예를 들어, "내 오른쪽 1m 거리에 공이 있어"라고 말할 때, "나"라는 기준점을 사용합니다. 하지만 상대방이 나로부터 4m 떨어진 곳에 있다면, "네 왼쪽 3m 거리에 공이 있어"라고 설명하는 것이 상대방이 공의 위치를 더 쉽게 파악할 수 있습니다. 이때 기준이 되는 위치를 원점(Origin)이라고 합니다.
public GameObject BObject;
void Start()
{
BObject.transform.position = new Vector3(1,2,3);
}
public GameObject AObject;
void Start()
{
AObject.transform.position = new Vector3(1,2,3);
}
public GameObject AObject;
void Start()
{
AObject.transform.position = new Vector3(0,1,2);
}

AObject.transform.position은 AObject의 부모 오브젝트 Transform 컴포넌트의 위치를(x,y,z) 고려한 로컬 좌표계이다.
만약 실수로, AObject.transform.localPosition 코드를 작성하였지만, 부모가 없을 때는 월드 좌표계로 계산된다.

아래 코드 예제를 보자.
public GameObject AObject;
void Start()
{
// 부모가 없으므로 AObject는 월드 좌표와 로컬 좌표가 동일합니다.
// AObject의 로컬 좌표를 (2, 3, 4)로 설정
AObject.transform.localPosition = new Vector3(2, 3, 4);
// AObject의 월드 좌표를 출력
Debug.Log("AObject's World Position: " + AObject.transform.position); // (2, 3, 4)
}
public class AObject : MonoBehaviour //AObject가 가지고 있는 스크립트
{
void Start()
{
GameObject Parent = GameObject.Find("Parent);
Parent.transform.position = new Vector3(0,0,0); //부모의 월드 좌표를 0,0,0으로 설정
transform.localPosition = new Vector3(3,3,3); //부모의 월드 좌표를 기준으로 AObject의 로컬 좌표를 3,3,3으로 설정.
Debug.Log(transform.position); //3,3,3으로 변경
}
}
public class AObject : MonoBehaviour //AObject가 가지고 있는 스크립트
{
void Start()
{
GameObject Parent = GameObject.Find("Parent);
transform.localPosition = new Vector3(3,3,3) - Parent.transform.position; //(3,3,3) - (2,1,1) = (1,2,2). 즉, A오브젝트의 로컬 좌표는 (1,2,2) 이다.
Debug.Log(transform.position); //3,3,3 출력
}
}




public class AObject : MonoBehaviour //AObject가 가지고 있는 스크립트
{
void Start()
{
transform.position = new Vector3(3,3,3);
Debug.Log(transform.position); //3,3,3으로 변경
}
}
public class Player : MonoBehaviour
{
public Camera cam;
void Start()
{
cam.transform.localPosition = -transform.forward * 3.0f + Vector3.up * 1.5f;
}
}