3

三角形と頂点を追加または削除し、それらの位置を変更して、メッシュを別のメッシュに変換する方法が必要です。

私の目標は、Unity 内でスムーズに「モンスター」(単一メッシュ) を人間 (これも単一メッシュ) に変換することです。このプロジェクトで見つけることができる「Crumple Mesh Modifier」のようなものはこちら

私の英語について申し訳ありません。私は英語を話す人ではありません。事前に感謝します。

4

1 に答える 1

2

メッシュの動的作成:

MeshFilter meshFilter = GetComponent();
Mesh mesh = meshFilter.sharedMesh;

if (mesh == null){
    meshFilter.mesh = new Mesh();
    mesh = meshFilter.sharedMesh;
}

Vector3 p0 = new Vector3(0,0,0);
Vector3 p1 = new Vector3(1,0,0);
Vector3 p2 = new Vector3(0,1,0);
Vector3 p3 = new Vector3(0,0,1);

// clear mesh of current data
mesh.Clear();

// set vertices
mesh.vertices = new Vector3[]{p0,p1,p2,p3};

// set 
mesh.triangles = new int[]{
    0,1,2,
    0,2,3,
    2,1,3,
    0,3,1
};
mesh.RecalculateNormals();
mesh.RecalculateBounds();
mesh.Optimize();

既存の頂点の変更 (面についても同様に機能します):

// mesh.vertices returns a copy
Vector3[] vert_copy = mesh.vertices;
vert_copy[0] = new Vector3(10,11,12);
vert_copy[1] = new Vector3(13,14,15);

// reassign new vertices to mesh
mesh.vertices = vert_copy;

mesh.RecalculateNormals();
mesh.RecalculateBounds();
mesh.Optimize();

これらの呼び出しは、法線と境界を再計算するとコストがかかります。「変換」中にメッシュが他のメッシュと物理的に相互作用しない場合は 、「変換」が完了するまでRecalculateBounds()を延期できます。同様に、メッシュに対してフレームごとの小さな変換のみが予想される場合は、RecalculateNormals()を 1 フレームおきまたは 300 ミリ秒ごとに制限できます。

于 2013-01-21T04:40:33.300 に答える