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 |