コガネブログ

平日更新を目標に Unity や C#、Visual Studio、ReSharper などのゲーム開発アレコレを書いていきます

【Unity】メッシュの頂点を設定する時は Mesh.vertices ではなく Mesh.SetVertices を使用することで GC Alloc の発生を防ぐことができる

Mesh.vertices

using UnityEngine;

public class Example : MonoBehaviour
{
    private Mesh mesh;

    private void Awake()
    {
        mesh = new Mesh();
    }

    private void Update()
    {
        mesh.vertices = new []
        {
            new Vector3( 0, 1 ),
            new Vector3( 1, -1 ),
            new Vector3( -1, -1 ),
        };
    }
}

f:id:baba_s:20171229102332p:plain

Mesh.SetVertices

using System.Collections.Generic;
using UnityEngine;

public class Example : MonoBehaviour
{
    private List<Vector3> vertices = new List<Vector3>();

    private Mesh mesh;

    private void Awake()
    {
        mesh = new Mesh();
    }

    private void Update()
    {
        vertices.Clear();
        vertices.Add( new Vector3( 0, 1 ) );
        vertices.Add( new Vector3( 1, -1 ) );
        vertices.Add( new Vector3( -1, -1 ) );

        mesh.SetVertices( vertices );
    }
}

f:id:baba_s:20171229102407p:plain

関連記事