Skip to content

Instantly share code, notes, and snippets.

@PopupAsylumUK
Created April 10, 2023 16:06
Show Gist options
  • Save PopupAsylumUK/26fba5b63605b3236a46b80e22377342 to your computer and use it in GitHub Desktop.
Save PopupAsylumUK/26fba5b63605b3236a46b80e22377342 to your computer and use it in GitHub Desktop.
Replaces the SpriteRenderer with an Image component when a Sprite asset is dragged under a Canvas
using System;
using UnityEditor;
using UnityEngine;
using UnityEngine.UI;
/// <summary>
/// Replaces the SpriteRenderer with an Image component when a Sprite asset is dragged under a Canvas
/// </summary>
[InitializeOnLoad]
public static class ImageByDefault
{
static ImageByDefault()
{
AssemblyReloadEvents.AssemblyReloadCallback beforeRelod = null;
beforeRelod = () =>
{
ObjectFactory.componentWasAdded -= SwapSpriteRenderer;
AssemblyReloadEvents.beforeAssemblyReload -= beforeRelod;
};
ObjectFactory.componentWasAdded += SwapSpriteRenderer;
AssemblyReloadEvents.beforeAssemblyReload += beforeRelod;
}
private static void SwapSpriteRenderer(Component component)
{
if (component is SpriteRenderer spriteRenderer)
{
EditorApplication.CallbackFunction SwapComponent = null;
SwapComponent = () =>
{
EditorApplication.delayCall -= SwapComponent;
if (component.GetComponentsInParent<Canvas>(true).Length > 0)
{
var gameObject = spriteRenderer.gameObject;
var sprite = spriteRenderer.sprite;
UnityEngine.Object.DestroyImmediate(spriteRenderer);
var image = gameObject.AddComponent<Image>();
image.sprite = sprite;
image.SetNativeSize();
EditorUtility.SetDirty(image);
}
};
EditorApplication.delayCall += SwapComponent;
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment