-
-
Save todorok1/86f0ae953e761914fccbcc365b49c98f to your computer and use it in GitHub Desktop.
グループ分けしたメッシュごとに結合するサンプル
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// グループ分けしたマテリアルごとにオブジェクトを作成し、メッシュを結合します。 | |
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