본문 바로가기

Unity3D Terrain/Scale & Vertices

Object Size & Vertices in Unity

유니티에서 게임 오브젝트의 크기와 정점(Vertex)에 대한 테스트


유니티 에디터의 Inspector 뷰에서 Scale 을 조정하면 Scene 뷰에 보여지는 해당 오브젝트의 크기를 변경할 수 있다.

예를 들어, Plane 오브젝트를 하나 생성하면 x, z 평면에 놓여지고, Scale은 디폴트 1로 설정되어 있으며, Plane 오브젝트를 구성하는 총 정점수는 121(11x11)개이고 한 행에 11개의 정점이 있고 총 11개 행으로 구성되어 있다. 그리고 Plane 오브젝트의 크기를 아래와 같은 코드를 이용하여 출력해보면 10 으로 나타난다


[Plane 오브젝트의 크기와 각 정점좌표를 출력하는 코드]

void Start () {

print("Collider 크기:"+gameObject.GetComponent<Collider>().bounds.size);        // (10.0, 0.0, 10.0)

print("Renderer 크기:"+gameObject.GetComponent<Renderer>().bounds.size);     // (10.0, 0.0, 10.0)


Vector3[] vertices = gameObject.GetComponent<MeshFilter> ().mesh.vertices;

for(int i=0;i<vertices.Length;i++) {

print ("Vertices["+i+"]:"+vertices[i].x+","+vertices[i].y+","+vertices[i].z);

}

}


[위의 스크립트 출력내용]

Collider 크기: (10.0, 0.0, 10.0)

Renderer 크기: (10.0, 0.0, 10.0)


Vertices[0]:5,-1.110223E-16,5

Vertices[1]:4,-1.110223E-16,5

Vertices[2]:3,-1.110223E-16,5

Vertices[3]:2,-1.110223E-16,5

Vertices[4]:0.9999999,-1.110223E-16,5

Vertices[5]:0,-1.110223E-16,5

Vertices[6]:-1,-1.110223E-16,5

Vertices[7]:-2,-1.110223E-16,5

Vertices[8]:-3,-1.110223E-16,5

Vertices[9]:-4,-1.110223E-16,5

Vertices[10]:-5,-1.110223E-16,5

Vertices[11]:5,-8.881784E-17,4

Vertices[12]:4,-8.881784E-17,4

  ....

    .......

   .................

Vertices[120]:-5,1.110223E-16,-5



Plane 오브젝트의 Scale 을 5, 5, 5 로 설정하여 그 크기를 출력하는 경우는 다음과 같이 크기는 5배(50)로 커졌지만 각 정점의 좌표는 변함이 없다


[Hierarchy 뷰에서 Plane을 선택하고 Inspector 뷰에서 Scale 을 5, 5, 5 로 설정하여 다시 테스트한 경우]

Collider 크기: (50.0, 0.0, 50.0)

Renderer 크기: (50.0, 0.0, 50.0)


Vertices[0]:5,-1.110223E-16,5

Vertices[1]:4,-1.110223E-16,5

Vertices[2]:3,-1.110223E-16,5

Vertices[3]:2,-1.110223E-16,5

Vertices[4]:0.9999999,-1.110223E-16,5

Vertices[5]:0,-1.110223E-16,5

Vertices[6]:-1,-1.110223E-16,5

Vertices[7]:-2,-1.110223E-16,5

Vertices[8]:-3,-1.110223E-16,5

Vertices[9]:-4,-1.110223E-16,5

Vertices[10]:-5,-1.110223E-16,5

Vertices[11]:5,-8.881784E-17,4

Vertices[12]:4,-8.881784E-17,4

  ....

    .......

   .................

Vertices[120]:-5,1.110223E-16,-5



위의 결과를 보면 ...

오브젝트의 크기는 Inspector 뷰의 Scale 속성을 통해 변경할 수 있고,

각 정점의 좌표는 월드좌표가 아니라 해당 오브젝트의 중심을 기준으로 한 상대적인 위치를 나타낸다는 것을 확인할 수 있다


그러므로 오브젝트의 각 정점의 좌표를 월드좌표로 변환할 필요가 있다면 다음과 같은 방법을 사용하면 된다


Vector3[] vertices = gameObject.GetComponent<MeshFilter> ().mesh.vertices;

Vector3 wv = plane.transform.position + vertices[0];  // 오브젝트의 첫번째 정점좌표를 월드좌표로 변환함


Cube오브젝트의 경우는 총 정점수는 24개이며 모든 정점은 Cube의 중심으로부터 0.5 단위 떨어져 있고 오브젝트의 크기는 1 로 나타난다

Sphere의 총 정점수는 525개로 구성되어 있고 그 크기는 1이다.