本日はUnity枠です。
Unityでは基本的にfbxやobjなどのファイルをインポートして3Dモデルを扱います。
メッシュの削減や改変は基本的にはUnityのワークフローではありませんが、Meshクラスのスクリプトを使用することで手動でメッシュの改変を行うことはでき舞うs。
今回はスクリプトで2つのメッシュを一つのメッシュに統合していきます。
〇コード
//Unity2022.3.5で動作確認 using UnityEngine; public class MeshCombiner : MonoBehaviour { void Start() { // 2つのメッシュを取得 MeshFilter meshFilter1 = GameObject.Find("Mesh1").GetComponent<MeshFilter>(); MeshFilter meshFilter2 = GameObject.Find("Mesh2").GetComponent<MeshFilter>(); // メッシュを統合する CombineInstance[] combine = new CombineInstance[2]; combine[0].mesh = meshFilter1.mesh; combine[0].transform = meshFilter1.transform.localToWorldMatrix; combine[1].mesh = meshFilter2.mesh; combine[1].transform = meshFilter2.transform.localToWorldMatrix; Mesh combinedMesh = new Mesh(); combinedMesh.CombineMeshes(combine); // 統合されたメッシュを新しいオブジェクトに適用 GameObject combinedObject = new GameObject("CombinedMesh"); combinedObject.AddComponent<MeshFilter>().mesh = combinedMesh; combinedObject.AddComponent<MeshRenderer>().material = meshFilter1.GetComponent<MeshRenderer>().material; // 元のメッシュを非アクティブ meshFilter1.gameObject.SetActive(false); meshFilter2.gameObject.SetActive(false); } }
このコードではシーン内のMesh1
及びMesh2
を一つのCombinedMeshという名前のオブジェクトに統合します。
〇CombineInstance
CombineInstanceはメッシュの統合を行うことができます。
角配列にはそれぞれ統合したいメッシュのデータが入り、最後に combinedMesh.CombineMeshes(Combineinstance[])
の処理を実行することでメッシュが統合され新しいMeshオブジェクトが生成されます。
Meshの頂点や法線などから再生成すると思ってやってみましたが、意外と便利なメソッドのおかげで簡単に実現できました。
本日は以上です。