1.

Mesh FIlter

編集

本稿は Unity の Mesh Filter コンポーネントに関する記事です。

Mesh Filter の Inspector 表示

Mesh Filter は、ゲームオブジェクトが描画するときに使うメッシュ (3Dモデルの形状データ)を指定するコンポーネントです。実際の描画は別コンポーネントの Mesh Renderer が担当します。

つまり、Mesh Filter = 形状を持つ係Mesh Renderer = それを画面に描く係という分業構造になっています。

Mesh Filter の役割

項目内容
クラスUnityEngine.MeshFilter
役割使用する Mesh アセットへの参照を保持
主なプロパティmesh (実行時のインスタンス) / sharedMesh (アセット共有)
セットになるMesh Renderer (描画) + マテリアル

Mesh Filter / Mesh Renderer / Skinned Mesh Renderer の関係

用途必要コンポーネント
静的・剛体メッシュ (壁、家具、小物等)Mesh Filter + Mesh Renderer
ボーンアニメーションするキャラ/生物Skinned Mesh Renderer 単独 (Mesh Filter は不要)
2D スプライトSprite Renderer (Mesh Filter 不使用)

基本的な使い方

  1. Hierarchy で対象 GameObject を選択
  2. Inspector で「Add Component」→「Mesh」→Mesh Filter を追加
  3. 同じく Mesh Renderer を追加 (3D Object メニューから作るとセットで付与される)
  4. Mesh Filter の Mesh 欄に使いたいメッシュアセット (Cube、Sphere、または FBX 内のメッシュ等) をアサイン
  5. Mesh Renderer の Materials にマテリアルを設定

mesh プロパティと sharedMesh プロパティの違い

スクリプトから Mesh Filter のメッシュを変更/参照する際は、用途に応じて使い分けが必要です。

プロパティ挙動使うとき
mesh初回アクセス時にそのインスタンス専用のコピーを生成この GameObject のメッシュだけを動的変形したい (頂点位置を書き換える等)
sharedMeshアセット本体への直接参照読み取りだけ/全インスタンス一括で変えたいとき。エディタ拡張

注意: sharedMesh をスクリプトから書き換えると同じメッシュを参照している全 GameObjectに影響します。意図しない場合は mesh を使用してください。

動的にメッシュを差し替える例

using UnityEngine;

public class SwapMesh : MonoBehaviour
{
    public Mesh meshA;
    public Mesh meshB;
    private MeshFilter mf;

    void Start() {
        mf = GetComponent<MeshFilter>();
    }

    void OnTriggerEnter(Collider other) {
        mf.mesh = (mf.sharedMesh == meshA) ? meshB : meshA;
    }
}

よくある落とし穴

  • マテリアルが付いていない — Mesh Filter だけで Mesh Renderer が無い、または Material 未設定でピンク色のオブジェクトに見える
  • 法線が反転 — インポート時のNormals 設定や、両面表示用シェーダの利用を検討
  • 大量の同一形状GPU Instancing 対応シェーダで Draw Call を削減
  • 頂点数が多すぎる — LOD Group や ProBuilder のメッシュ最適化を活用
  • sharedMesh を書き換えて全インスタンスに波及 — 意図しないなら mesh を使う

関連

編集
Post Share
子ページ

子ページはありません

同階層のページ
  1. Mesh FIlter
  2. Mesh Renderer