スクリプトからメッシュの作成や変更をできるようにするクラスです。
Meshes contain vertices and multiple triangle arrays.
See the Procedural example project
for examples of using the mesh interface.
三角配列は頂点配列のインデックスであり、おのおのの三角ごとに 3 つの頂点を使用します。
For every vertex there can be a normal, two texture coordinates, color and tangent.
These are optional though and can be removed at will. All vertex information is stored in separate
arrays of the same size, so if your mesh has 10 vertices, you would also have 10-size arrays
for normals and other attributes.
修正できるメッシュインターフェースを使用する目的は通常は 3 つほどあります。
1. Building a mesh from scratch:
should always be done in the following order:
a) assign vertices
b) assign triangles.
using UnityEngine; using System.Collections;
public class ExampleClass : MonoBehaviour { public Vector3[] newVertices; public Vector2[] newUV; public int[] newTriangles; void Start() { Mesh mesh = new Mesh(); GetComponent<MeshFilter>().mesh = mesh; mesh.vertices = newVertices; mesh.uv = newUV; mesh.triangles = newTriangles; } }
2. Modifying vertex attributes every frame:
a) get vertices
b) modify them
c) assign them back to the mesh.
using UnityEngine; using System.Collections;
public class ExampleClass : MonoBehaviour { void Update() { Mesh mesh = GetComponent<MeshFilter>().mesh; Vector3[] vertices = mesh.vertices; Vector3[] normals = mesh.normals; int i = 0; while (i < vertices.Length) { vertices[i] += normals[i] * Mathf.Sin(Time.time); i++; } mesh.vertices = vertices; } }
3. Continously changing the mesh triangles and vertices:
a) call Clear to start fresh
b) assign vertices and other attributes
c) assign triangle indices.
It is important to call Clear before assigning new vertices or triangles.
Unity always checks the supplied triangle indices whether they don't reference out of bounds vertices.
Calling Clear then assigning vertices then triangles makes sure you never have out of bounds data.
using UnityEngine;
public class ExampleClass : MonoBehaviour {
Vector3[] newVertices; Vector2[] newUV; int[] newTriangles; void Start() { Mesh mesh = GetComponent<MeshFilter>().mesh;
mesh.Clear(); // Do some calculations... mesh.vertices = newVertices; mesh.uv = newUV; mesh.triangles = newTriangles; } }
bindposes | バインドポーズ。各インデックスのバインドポーズは同じインデックスのボーンを参照します。 |
blendShapeCount | メッシュの BlendShape 数を返します |
boneWeights | 各頂点のボーンウェイト |
bounds | メッシュのバウンズ |
colors | メッシュの頂点の色配列 |
colors32 | メッシュの頂点の色配列 |
isReadable | モデルがインポートされたときの読み取り/書き込みの有効ステータス |
normals | メッシュの法線 |
subMeshCount | サブメッシュの数。すべてのメッシュは個別の三角形のリストを持ちます。 |
tangents | メッシュの接線 |
triangles | メッシュ内のすべての三角形を含む配列 |
uv | Mash のベースとなるテクスチャの座標 |
uv2 | 2 つめのテクスチャの座標 |
uv3 | 存在する場合、メッシュの 3 番目のテクスチャ座標設定 |
uv4 | 存在する場合、メッシュの 4 番目のテクスチャ座標設定 |
vertexCount | メッシュの頂点の数 (読み取り専用) を返します。 |
vertices | 頂点の位置や、新しい頂点の位置の配列 |
Mesh | 空のメッシュを作成します |
AddBlendShapeFrame | 新しいブレンドシェイプのフレームを追加します |
Clear | すべての頂点データと三角形のインデックスを削除します |
ClearBlendShapes | メッシュからすべてのブレンドシェイプをクリアします |
CombineMeshes | メッシュに複数のメッシュを組み合わせます |
GetBlendShapeFrameCount | ブレンドシェイプのフレーム数を返します |
GetBlendShapeFrameVertices | ブレンドシェイプフレームの deltaTangents、deltaTangents、deltaTangents を取得します |
GetBlendShapeFrameWeight | ブレンドシェイプフレームの重みを返します |
GetBlendShapeIndex | 指定インデックスの BlendShape のインデックスを返します。 |
GetBlendShapeName | 指定インデックスの BlendShape 名を返します |
GetIndices | サブメッシュの index バッファを返します |
GetTopology | サブメッシュのトポロジーを取得します |
GetTriangles | サブメッシュの三角形リストを返します |
GetUVs | 指定されたチャンネルの UV を取得します |
MarkDynamic | 頻繁な更新を行うためにメッシュを最適化します |
Optimize | 表示用にメッシュを最適化します |
RecalculateBounds | 頂点からメッシュのバウンディングボリュームを再計算します |
RecalculateNormals | 三角形と頂点からメッシュの法線を再計算します |
SetColors | メッシュの頂点の色配列 |
SetIndices | サブメッシュのインデックスバッファを設定します。 |
SetNormals | メッシュの法線を設定します。 |
SetTangents | メッシュの接線を設定します。 |
SetTriangles | サブメッシュの三角形のリストを設定します。 |
SetUVs | 指定されたチャンネルの UV を設定します |
SetVertices | 新しい頂点位置の配列を割り当てます |
UploadMeshData | 以前行ったメッシュの変更をグラフィック API へアップロードします。 |
GetInstanceID | オブジェクトのインスタンス ID を返します |
ToString | ゲームオブジェクトの名前を返します |
Destroy | ゲームオブジェクトやコンポーネント、アセットを削除します |
DestroyImmediate | オブジェクト obj を破棄します。 |
DontDestroyOnLoad | 新しいシーンを読み込んでもオブジェクトが自動で破壊されないように設定します |
FindObjectOfType | タイプ type から最初に見つけたアクティブのオブジェクトを返します |
FindObjectsOfType | タイプから見つけたすべてのアクティブのオブジェクト配列を返します |
Instantiate | オブジェクト original のコピーを返します |
bool | オブジェクトが存在するかどうか |
operator != | 二つのオブジェクトが異なるオブジェクトを参照しているか比較します |
operator == | 2つのオブジェクト参照が同じオブジェクトを参照しているか比較します。 |