コガネブログ

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

【Unity】スプライトからメッシュを生成するスクリプト

ソースコード

using System;
using System.Linq;
using UnityEngine;

public static class SpriteUtils
{
    public static Mesh SpriteToMesh( Sprite sprite )
    {
        var mesh = new Mesh();

        mesh.SetVertices( Array.ConvertAll( sprite.vertices, x => ( Vector3 ) x ).ToList() );
        mesh.SetUVs( 0, sprite.uv.ToList() );
        mesh.SetTriangles( Array.ConvertAll( sprite.triangles, x => ( int ) x ), 0 );

        return mesh;
    }
}

使用例

using UnityEditor;
using UnityEngine;

public static class Example
{
    [MenuItem( "Tools/Hpge" )]
    private static void Hoge()
    {
        var sprite = AssetDatabase.LoadAssetAtPath<Sprite>( "..." );
        var mesh   = SpriteUtils.SpriteToMesh( sprite );

        AssetDatabase.CreateAsset( mesh, "Assets/result.mesh" );
    }
}

f:id:baba_s:20200708103445p:plain

例えば上記のようなスプライトからメッシュを生成すると

f:id:baba_s:20200708103505p:plain

このようなメッシュが生成されます

例えば生成したメッシュを Particle System で使用することで
Overdraw を抑えることができます

参考サイト様