Version: 2022.3
  • C#


Suggest a change


Thank you for helping us improve the quality of Unity Documentation. Although we cannot accept all submissions, we do read each suggested change from our users and will make updates where applicable.


Submission failed

For some reason your suggested change could not be submitted. Please <a>try again</a> in a few minutes. And thank you for taking the time to help us improve the quality of Unity Documentation.




public static void SetIconForObject(Object obj, Texture2D icon);


obj The GameObject or MonoScript to associate the icon with.
icon The custom icon to associate with the GameObject or MonoScript. When this value is null, the default icon is restored.


Sets a custom icon to associate with a GameObject or MonoScript. The custom icon is displayed in the Scene view and the Inspector.

Custom icons for GameObjects are saved in the scene.

using UnityEngine;
using UnityEditor;

class Example { [MenuItem("Examples/Set Custom Icon on GameObject")] public static void SetCustomIconOnGameObject() { var go = new GameObject(); var icon = AssetDatabase.LoadAssetAtPath<Texture2D>("Assets/MyIcon.png");

EditorGUIUtility.SetIconForObject(go, icon); } }

Using this function, you can set custom icons directly on a MonoScript. However the next time the script is reimported, the change is lost.

using UnityEngine;
using UnityEditor;

class Example { [MenuItem("Examples/Set Custom Icon on MonoScript")] public static void SetCustomIconOnMonoScript() { var monoImporter = AssetImporter.GetAtPath("Assets/MyMonoBehaviour.cs") as MonoImporter; var monoScript = monoImporter.GetScript(); var icon = AssetDatabase.LoadAssetAtPath<Texture2D>("Assets/MyIcon.png");

EditorGUIUtility.SetIconForObject(monoScript, icon); } }

To make the custom icon persistent, call MonoImporter.SetIcon and AssetImporter.SaveAndReimport. If the script is in a managed plugin, call PluginImporter.SetIcon instead of MonoImporter.SetIcon.

When you set custom icons from a GUI, it is recommended that you defer reimport until the GUI is closed. If you reimport before the GUI is closed, the domain reload caused by recompiling the script could lead to a poor user experience.

Additional resources: MonoImporter, PluginImporter.