Как назначить иконку файлу скрипта, который только что был создан в Unity3D? - PullRequest
0 голосов
/ 07 марта 2019

Я пытаюсь выяснить, как назначить значок файлу скрипта, который только что был создан в Unity, но пока безуспешно.
Я создал этот класс EditorWindow, который позволяет мне создавать новый класс c # с некоторым пользовательским шаблоном.

После создания файла я сохраняю ресурс, как этот

AssetDatabase.ImportAsset(filePath, ImportAssetOptions.ForceUpdate);
AssetDatabase.SaveAssets();
AssetDatabase.Refresh();

После того, как сценарий создан, я хочу также автоматически назначить пользовательский значок. Примерно так, если вы создаете сценарий с именем GameManager, unity автоматически назначает пользовательский значок для этого файла сценария.

Я создал класс AssetPostprocessor, который проверяет, создается ли новый ресурс по определенному пути, и изменяет значок этого файла.
Проблема в том, что когда я пытался проверить это, Unity потерпел крах для меня. Так что у меня мало идей ...

using System;
using System.Reflection;
using UnityEditor;
using UnityEngine;

public class Script_Importer : AssetPostprocessor
{
    void OnPreprocessAsset()
    {
        if (assetPath.Contains("Scripts/CustomScripts/"))
        {
            AssetImporter asset = (AssetImporter)assetImporter;
            var obj = AssetImporter.GetAtPath(assetPath) as UnityEngine.Object;
            AssignLabel(obj);
        }
    }

    void AssignLabel(UnityEngine.Object obj)
    {
        Texture2D tex = EditorGUIUtility.IconContent("Script_Icon").image as Texture2D;
        Type editorGUIUtilityType = typeof(EditorGUIUtility);
        BindingFlags bindingFlags = BindingFlags.InvokeMethod | BindingFlags.Static | BindingFlags.NonPublic;

        object[] args = new object[] { obj, tex };
    editorGUIUtilityType.InvokeMember("SetIconForObject", bindingFlags, null, null, args);
    }
}
...