Skip to content

Instantly share code, notes, and snippets.

@todorok1
Created January 3, 2021 04:48
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save todorok1/86f0ae953e761914fccbcc365b49c98f to your computer and use it in GitHub Desktop.
Save todorok1/86f0ae953e761914fccbcc365b49c98f to your computer and use it in GitHub Desktop.
グループ分けしたメッシュごとに結合するサンプル
// グループ分けしたマテリアルごとにオブジェクトを作成し、メッシュを結合します。
foreach (KeyValuePair<string, List<MeshFilter>> pair in matFilterDict)
{
// 結合したメッシュを表示するゲームオブジェクトを作成します。
GameObject obj = CreateMeshObj(pair.Key);
obj.transform.SetAsFirstSibling();
// MeshFilterとMeshRendererをアタッチします。
MeshFilter combinedMeshFilter = CheckComponent<MeshFilter>(obj);
MeshRenderer combinedMeshRenderer = CheckComponent<MeshRenderer>(obj);
// 結合するメッシュの配列を作成します。
List<MeshFilter> filterList = pair.Value;
CombineInstance[] combine = new CombineInstance[filterList.Count];
// 結合するメッシュの情報をCombineInstanceに追加していきます。
for (int i = 0; i < filterList.Count; i++)
{
combine[i].mesh = filterList[i].sharedMesh;
combine[i].transform = filterList[i].transform.localToWorldMatrix;
filterList[i].gameObject.SetActive(false);
}
// 結合したメッシュを作成したゲームオブジェクトにセットします。
combinedMeshFilter.mesh = new Mesh();
combinedMeshFilter.mesh.indexFormat = UnityEngine.Rendering.IndexFormat.UInt32;
combinedMeshFilter.mesh.CombineMeshes(combine);
// 結合したメッシュにマテリアルをセットします。
combinedMeshRenderer.material = matNameDict[pair.Key];
// 結合したメッシュをコライダーにセットします。
MeshCollider meshCol = CheckComponent<MeshCollider>(obj);
meshCol.sharedMesh = combinedMeshFilter.mesh;
// 親オブジェクトを表示します。
fieldParent.gameObject.SetActive(true);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment