본문 바로가기

프로그래밍/Unity

[Unity] Mesh 생성 및 변경

Mesh

버텍스, uv 등의 정보를 가지고 있는 클래스로, 버텍스를 생성하거나 생성된 버텍스를 조정할 때

필요한 클래스이다.

   

메쉬필터(MeshFilter) 에 설정하고, 메쉬렌더러에 설정된 매터리얼로 렌더링이 이루어진다.

어찌보면 버텍스 쉐이더와 프레그먼트 쉐이더라고도 할 수 있겠다.

   

복잡한 내용은 없고, 그냥 버텍스 배열에 각 버텍스를 설정하고, uv 배열에 uv 설정하고,

삼각형 인덱스 잡아주고 하면 된다.

   

역시나 Unity Script Reference 에 자세히 나와 있어서 좀 민망.. 쩝

   

1. 생성

.vertices : Vector3[] vertex 배열

.uv : Vector2[] uv 배열

.triangles : int[] 삼각형 인덱스

   

위 배열을 설정하고, 메쉬필터의 mesh 어트리뷰트에 넣어주면 된다.

   

2. 변경

메쉬필터의 메쉬 오브젝트 가져오기

Mesh mesh = GetComponent<MeshFilter>().mesh;

   

해당 메쉬에서 각 배열을 가져와 필요한 요소를 변경..

Vector3[] vertices = mesh.vertices;

vertices[0] = 0;

   

다시 해당 배열에 저장

mesh.vertices = vertices;

   

3. 버텍스 교체시..

버텍스나 triangles 배열을 가져와 내용만 변경하는것이아닌 별도의 버텍스 배열을 넣는 경우 Mesh.Clear() 메쏘드를 호출해 주어야 함.

유니티는 매번 triangles의 인덱스 정보와 실제 버텍스간의 참조 유효성을 검토하므로, 변경 시 Clear를 꼭 해 줄것..

   

   

   

   

> 메쏘드

CombineMeshes(CombineInstance[] combine, bool mergeSubMeshes, bool useMatrics )

메쉬를 합치는 메쏘드로 맥스의 Attach와 같이 메쉬를 서브메쉬로 묶어 주는 기능이다.

여러 메쉬오브젝트가 있는 경우 해당 메쉬필터수만큼 CombineInstance를 생성하고, 각 정보를 인스턴스에 넣어 주고 위 메쏘드를 호출하면된다.

   

레퍼런스에 자신 메쉬들을 합치는 예제 소스가 있다.

unity에서 제공되는 CombineChildren.cs 스크립트 소스에서는 MeshCombineUtility 라는 녀석을 사용.

   

RecalculateBounds()

RecalculateNormals()

버텍스 변경 후 변경된 버텍스에 대한 노말, 바운딩볼륨 등을 다시 계산한다.

   


'프로그래밍 > Unity' 카테고리의 다른 글

[Unity] 유니티용 DLL  (0) 2018.09.18
[Unity] VR 환경 끄거나 켜기  (0) 2018.09.14
[Unity] AssetDatabase  (0) 2018.09.12
[Unity] AssetBundle  (0) 2018.08.24
[unity3d] 서피스 쉐이더 정리  (1) 2018.06.26
[Unity] 인스펙터에 UI 추가하기  (0) 2011.06.15
2D를 위한 Plane 생성  (0) 2011.05.30
Physics.Raycast  (0) 2011.05.13
2D 게임을 위한 몇가지  (0) 2011.05.09
터치 입력  (0) 2011.04.04