コガネブログ

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

【Unity】Instantiating material due to calling renderer.material during edit mode. This will leak materials into the scene. You most likely want to use renderer.sharedMaterial instead.

概要

using UnityEditor;
using UnityEngine;

public static class Example
{
    [MenuItem( "Tools/Hoge" )]
    private static void Hoge()
    {
        var gameObject   = Selection.activeGameObject;
        var lineRenderer = gameObject.GetComponent<LineRenderer>();
        lineRenderer.materials[0] = AssetDatabase.GetBuiltinExtraResource<Material>( "Sprites-Default.mat" );
    }
}

たとえば上記のようなエディタ拡張を書いて実行した時に

Instantiating material due to calling renderer.material during edit mode. 
This will leak materials into the scene. 
You most likely want to use renderer.sharedMaterial instead.

このようなエラーが出る場合は

using UnityEditor;
using UnityEngine;

public static class Example
{
    [MenuItem( "Tools/Hoge" )]
    private static void Hoge()
    {
        var gameObject   = Selection.activeGameObject;
        var lineRenderer = gameObject.GetComponent<LineRenderer>();
        lineRenderer.sharedMaterial = AssetDatabase.GetBuiltinExtraResource<Material>( "Sprites-Default.mat" );
    }
}

sharedMaterial でマテリアルを設定するとエラーが出なくなります