Mesh
Namespace: UnityEngine
/
Inherits from: Object
Suggest a change
Success!
Thank you for helping us improve the quality of Unity Documentation. Although we cannot accept all submissions, we do read each suggested change from our users and will make updates where applicable.
Close
Sumbission failed
For some reason your suggested change could not be submitted. Please try again in a few minutes. And thank you for taking the time to help us improve the quality of Unity Documentation.
Close
Description
スクリプトからメッシュを作成または変更できるようにするクラスです。
メッシュは頂点と 複数の三角形の配列を含んで作成されています。
メッシュインタフェースを使用したサンプルについては プロシージャルのサンプルプロジェクト
を参照してください。
三角配列は頂点配列のインデックスであり、各々の三角ごとに3つの頂点を使用します。
全ての頂点に、法線、二つのテクスチャ座標、カラー、および接線を保持できます。
これらはオプションであり、希望により削除できます。全ての頂点情報は
同じ大きさの別の配列に格納されるため、もし自身のメッシュが10個の頂点がある場合、
10個の法線や他の属性もまた存在します。
修正できるメッシュ インタフェースを使用する目的は通常は 3 つほどあります:
1. ゼロからメッシュを作成:
必ず次の手順で行なうべきです: 1) :ref::vertices を割り当て、2) :ref::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;
}
}
import UnityEngine
import System.Collections
public class ExampleClass(MonoBehaviour):
public newVertices as (Vector3)
public newUV as (Vector2)
public newTriangles as (int)
def Start() as void:
mesh as Mesh = Mesh()
GetComponent[of 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;
}
}
import UnityEngine
import System.Collections
public class ExampleClass(MonoBehaviour):
def Update() as void:
mesh as Mesh = GetComponent[of MeshFilter]().mesh
vertices as (Vector3) = mesh.vertices
normals as (Vector3) = mesh.normals
i as int = 0
while i < vertices.Length:
vertices[i] += (normals[i] * Mathf.Sin(Time.time))
i++
mesh.vertices = vertices
3. 継続的にメッシュ三角および頂点を変化させる:
1) Clear の呼び出しによりゼロから開始 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;
}
}
import UnityEngine
import System.Collections
public class ExampleClass(MonoBehaviour):
public newVertices as (Vector3)
public newUV as (Vector2)
public newTriangles as (int)
def Update() as void:
mesh as Mesh = GetComponent[of MeshFilter]().mesh
mesh.Clear()
mesh.vertices = newVertices
mesh.uv = newUV
mesh.triangles = newTriangles