akyboxブログ

旧AkiIroブログ

【Unity】DrawMesh初歩と動的Mesh生成

DrawMesh

APIはこれです.

docs.unity3d.com

これを使うことでアクティブなGameObjectを存在させずにMeshを描くことができます.
つまりその分軽量なわけです.

大抵は膨大な数(1,000,000とか)のパーティクルを扱う際に活躍する技術のようですが, 今回は初歩的に一つのMeshを描きます.
Meshは事前に用意せずに動的に生成してみます.
動的なMeshの生成に関してはこちらの記事がわかりやすいです.

www.shibuya24.info

コード

using UnityEngine;

public class DynamicMeshUsingDrawMesh : MonoBehaviour {
    [SerializeField]
    Material m_mat;
    Mesh m_mesh;

    void Start () {
        // 動的Mesh生成
        m_mesh = new Mesh();
        m_mesh.vertices = new Vector3[] {
            new Vector3 (-0.5f, -0.5f),
            new Vector3 (0.5f, -0.5f),
            new Vector3 (0.5f, 0.5f),
            new Vector3 (-0.5f, 0.5f),
        };
        m_mesh.uv = new Vector2[]
        {
            new Vector2(0,0),
            new Vector2(1f,0),
            new Vector2(1f,1f),
            new Vector2(0,1f),
        };
        m_mesh.triangles = new int[] {
            0, 1, 2,
            0, 2, 3,
        };
        m_mesh.RecalculateNormals();
        m_mesh.RecalculateBounds();
    }
    private void Update()
    {
        Graphics.DrawMesh(m_mesh, Vector3.zero, Quaternion.identity, m_mat, 0); 
    }
}

マテリアルはなんでもいいですが,今回は適当に赤いマテリアルをつけます. f:id:AkiIro:20170705001231p:plain

実行結果

f:id:AkiIro:20170705001008p:plain
動的にMeshを生成して描画できました.