Version: 2021.3
言語: 日本語
C#スクリプトでメッシュを使う
例: クアッドの作成

Mesh クラスの使用

Mesh クラスは、オブジェクトのメッシュジオメトリに対する基本的なスクリプトインターフェースです。これは配列を使用して、三角形、頂点位置、法線、テクスチャ座標を表します。また、メッシュ生成を支援するその他多くの便利なプロパティと関数を提供します。

オブジェクトのメッシュへのアクセス

メッシュデータは、Mesh Filter コンポーネントを用いて、オブジェクトにアタッチされています (オブジェクトは、ジオメトリを作るために メッシュレンダラー も必要とします)。このコンポーネントには、使い慣れた GetComponent 関数を使用してアクセスします。

using UnityEngine;
public class ExampleScript : MonoBehaviour
{
    MeshFilter mf;
    void Start()
    {
        //このオブジェクトが MeshFilter を持っている場合は、mf はそのコンポーネントを参照します
        mf = GetComponent<MeshFilter>();    
    }
}

メッシュデータの追加

メッシュオブジェクトには、頂点とその関連するデータ (法線や UV 座標) と三角形データに対するプロパティがあります。頂点は任意の順番で提供されますが、法線と UV の配列は、インデックスがすべて頂点に対応するように順序付けされる必要があります (つまり、法線の配列の要素 0 は、頂点 0 に法線を提供します)。頂点は、オブジェクトのローカル空間における点を表す Vector3 です。法線は、再度ローカル座標で方向を表す標準化された Vector3 になります。UV は、Vector2 で指定されますが、Vector2 タイプには、U や V というフィールドはないため、頭の中でこれらをそれぞれ X と Y に変換する必要があります。

三角形は、頂点配列のインデックスとして機能する整数の 3 の倍数で指定されます。三角形を表すために特殊なクラスを使用するのではなく、この配列は整数インデックスの簡単なリストで表します。インデックスは各三角形に対して 3 つずつ区切られ、最初の 3 つの要素は最初の三角形を定義し、次の 3 つは 2 つ目の三角形を定義する、というようになります。三角形で重要な点は、角の頂点の順序です。どの角から始めるかは問題ではありませんが、三角形の表示されている面を見下ろすようにして、時計回りになるように角が配置されている必要があります。

高度なメッシュ API

Mesh クラス には、Raw メッシュ頂点とインデックスバッファデータの操作を可能にする低レベルの上級者向けの API もあります。これは、最大のパフォーマンスが求められる場合、または最低限のメモリ割り当ての状況で役立ちます。

参照


  • 2019–08–14 修正されたページ
C#スクリプトでメッシュを使う
例: クアッドの作成