ProBuilder スクリプティング API とは
ProBuilder は、ProBuilder の各種ツールやウィンドウを拡張するために使用できる C# 用スクリプティング API を提供しています。これには以下の名前空間が含まれます。
- UnityEditor.ProBuilder は、Unity エディターのインテグレーション用のクラスと enum を提供します。これらは ProBuilder のメニューやウィンドウ、ツールバーに加え、ProBuilder ウィンドウやツールからしか使用できないメッシュ操作を拡張するために使用できます。
- UnityEngine.ProBuilder は、メッシュをコンパイルするためのクラス、構造体、enum を提供します。これらを使用して、メッシュの作成、イベントの処理、一部の演算機能など、ProBuilder の中核的機能の多くにアクセスできます。
- UnityEngine.ProBuilder.MeshOperations は、メッシュの編集のためのクラスを提供します。これらを使用して、トポロジーや I/0 操作などの ProBuilder メッシュの操作を行えます。
メッシュ作成と編集の全機能は UnityEngine.ProBuilder
および
UnityEngine.ProBuilder.MeshOperations
ライブラリに制限されています。これらは両方ともランタイムで使用可能です。
ProBuilder はメッシュデータを特定のコンポーネント (ProBuilderMesh) 内に格納し、必要に応じてそれを UnityEngine.Mesh オブジェクトにコンパイルします。
ProBuilderMesh
は以下のメッシュ情報を格納します。
- 位置
- UV
面
- 三角形
- マテリアル
- スムージンググループ
Auto (自動) / Manual (手動) UV
ノート: ProBuilder は、面毎に三角形を自動的に UV アンラップできます。この機能は Face クラスでトグルできます。また、ユーザーは手動で面をアンラップできます。
接線 (ユーザーが設定した場合)
- UV3/4 (ユーザーが設定した場合)
- 色
- 共有インデックス (共通頂点とも呼ばれる)
法線、接線、コリジョン、および UV は、必要に応じて計算されます。
メッシュを作成する
この例は、(ShapeGenerator クラスではなく) ProBuilder API を使用して単純なクアッドを構築する方法を示しています。
// 前方を向いた新しいクアッドを作成します。
ProBuilderMesh quad = ProBuilderMesh.Create(
new Vector3[] {
new Vector3(0f, 0f, 0f),
new Vector3(1f, 0f, 0f),
new Vector3(0f, 1f, 0f),
new Vector3(1f, 1f, 0f)
},
new Face[] { new Face(new int[] { 0, 1, 2, 1, 3, 2 } )
} );
メッシュを修正する
ProBuilder メッシュの修正は Unity メッシュの修正とは異なり、MeshFilter.sharedMesh を使用する代わりに ProBuilder representation of the Mesh: ProBuilderMesh を使用します。
基本は同じです。頂点位置を設定し、三角形 (ProBuilder の面) を修正してから、メッシュを再構築します。例えば以下のように、上記の例のクアッドの頂点を上方に動かせます。
// 頂点位置を上方に動かす。
Vertex[] vertices = quad.GetVertices();
for(int i = 0; i < quad.vertexCount; i++)
vertices[i] += Vector3.one;
// 三角形とサブメッシュ配列を Rebuild し、頂点位置とサブメッシュを `MeshFilter.sharedMesh` に適用する。
quad.SetVertices(vertices);
quad.Rebuild();
// UV、法線、接線、コリジョンを再計算し、Unity メッシュに適用する。
quad.Refresh();
// エディター内の場合、UV2 を生成して以下を使用して重複頂点を統合する。
EditorMeshUtility.Optimize(quad, true);
// ランタイムの場合、以下を使用して重複頂点を統合する。
MeshUtility.CollapseSharedVertices(quad);
MeshFilter.sharedMesh
を直接修正しないように注意してください。ProBuilder は、ProBuilderMesh::ToMesh 関数および ProBuilderMesh::Refresh 関数を使って Unity メッシュの更新を制御します。