Batches를 줄일수 있음. (최적화에 좋음)
GPU를 덜먹음.
같은 메테리얼을 사용하고 있어야됨.
1. 공통의 메테리얼을 가진 오브젝트들을 메쉬컴바인할 오브젝트의 하위 오브젝트로 넣음.

2. 메쉬컴바인 오브젝트에 스크립트를 넣고 material element에 넣음.

실행화면 큐브 오브젝트들이 꺼진 것을 확인 할 수 있다.
메쉬 컴바인 오브젝트만 활성화 되어있지만 랜더링은 똑같이 나옴.


코드
GPU를 덜먹음.
같은 메테리얼을 사용하고 있어야됨.
1. 공통의 메테리얼을 가진 오브젝트들을 메쉬컴바인할 오브젝트의 하위 오브젝트로 넣음.

2. 메쉬컴바인 오브젝트에 스크립트를 넣고 material element에 넣음.

실행화면 큐브 오브젝트들이 꺼진 것을 확인 할 수 있다.
메쉬 컴바인 오브젝트만 활성화 되어있지만 랜더링은 똑같이 나옴.


코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
[RequireComponent(typeof(MeshFilter))]
[RequireComponent(typeof(MeshRenderer))]
public class MeshCombine : MonoBehaviour {
public Material[] materials;
void Start()
{
MeshFilter[] meshFilters = GetComponentsInChildren<MeshFilter>();
CombineInstance[] combine = new CombineInstance[meshFilters.Length];
MeshRenderer renderer = GetComponent<MeshRenderer>();
int leng = renderer.materials.Length;
renderer.materials = materials;
int i = 0;
while (i < meshFilters.Length)
{
combine[i].mesh = meshFilters[i].sharedMesh;
combine[i].transform = meshFilters[i].transform.localToWorldMatrix;
meshFilters[i].gameObject.active = false;
i++;
}
transform.GetComponent<MeshFilter>().mesh = new Mesh();
transform.GetComponent<MeshFilter>().mesh.CombineMeshes(combine);
transform.gameObject.active = true;
this.gameObject.transform.localEulerAngles = new Vector3(0, 90);
}
}
| cs |
댓글
댓글 쓰기