Mesh
class in
UnityEngine
/
継承:Object
フィードバック
ありがとうございます
この度はドキュメントの品質向上のためにご意見・ご要望をお寄せいただき、誠にありがとうございます。頂いた内容をドキュメントチームで確認し、必要に応じて修正を致します。
閉じる
送信に失敗しました
なんらかのエラーが発生したため送信が出来ませんでした。しばらく経ってから<a>もう一度送信</a>してください。ドキュメントの品質向上のために時間を割いて頂き誠にありがとうございます。
閉じる
マニュアルに切り替える
説明
スクリプトからメッシュを作成または変更できるようにするクラスです。
メッシュは頂点と複数の三角形の配列を含んで作成されています。
メッシュインターフェースを使用したサンプルについては プロシージャルのサンプルプロジェクトを参照してください。
を参照してください。
三角配列は頂点配列のインデックスであり、各々の三角ごとに 3 つの頂点を使用します。
すべての頂点に、法線、二つのテクスチャ座標、カラー、および接線を保持できます。
これらはオプションであり、希望により削除できます。すべての頂点情報は
同じ大きさの別の配列に格納されるため、もし自身のメッシュが 10 個の頂点がある場合、
10 個の法線や他の属性もまた存在します。
修正できるメッシュインターフェースを使用する目的は通常は 3 つほどあります。
1. 0 からメッシュを作成 :
必ず次の手順で行なうべきです: 1) vertices を割り当て、2) triangles を割り当て
var newVertices : Vector3[];
var newUV : Vector2[];
var newTriangles : int[];
function Start () {
var mesh : Mesh = new Mesh ();
GetComponent.<MeshFilter>().mesh = mesh;
mesh.vertices = newVertices;
mesh.uv = newUV;
mesh.triangles = newTriangles;
}
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. 毎フレームごとに頂点属性を修正 :
1) 頂点を取得 2) それらを修正 3) それらをメッシュに再び割り当て
function Update () {
var mesh : Mesh = GetComponent.<MeshFilter>().mesh;
var vertices : Vector3[] = mesh.vertices;
var normals : Vector3[] = mesh.normals;
for (var i = 0; i < vertices.Length; i++)
vertices[i] += normals[i] * Mathf.Sin(Time.time);
mesh.vertices = vertices;
}
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. 継続的にメッシュ三角および頂点を変化させる :
1) Clear の呼び出しにより 0 から開始 2) 頂点および他の属性を割り当て 3) 三角頂点を割り当て
新しい頂点や三角を割り当てする前に Clear を呼び出しすることが大切です。
Unity により提供された三角頂点は常に、範囲外の頂点が参照されてないかチェックされます。
Clear を呼び出し、頂点を割り当て、三角を割り当て、という順番を守ることにより範囲外のデータがないことが保証されます。
var newVertices : Vector3[];
var newUV : Vector2[];
var newTriangles : int[];
function Update () {
var mesh : Mesh = GetComponent.<MeshFilter>().mesh;
mesh.Clear();
// Do some calculations...
mesh.vertices = newVertices;
mesh.uv = newUV;
mesh.triangles = newTriangles;
}
using UnityEngine;
using System.Collections;
public class ExampleClass : MonoBehaviour {
public Vector3[] newVertices;
public Vector2[] newUV;
public int[] newTriangles;
void Update() {
Mesh mesh = GetComponent<MeshFilter>().mesh;
mesh.Clear();
mesh.vertices = newVertices;
mesh.uv = newUV;
mesh.triangles = newTriangles;
}
}