Quantcast
Channel: Questions in topic: "icon"
Viewing all articles
Browse latest Browse all 271

How to create custom asset icons for ScriptableObject instances

$
0
0
I have an item database consisting of several ScriptableObjects of type `Item`. These items have a `public Sprite icon;` field, and the behavior I want is for the icon for each asset to reflect the contents of the icon Sprite. ---------- Currently, I am using `EditorGUIUtility.SetIconForObject(asset, icon.texture);` to accomplish this, but I am running into some strange issues with this that I can't pinpoint the cause of. ---------- Here is my current script: using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEditor; namespace InventorySystem { [InitializeOnLoad] public class InventorySystemEditorUtils { static InventorySystemEditorUtils() { List items = FindAssetsByType(); items.ForEach(item => { Item obj = AssetDatabase.LoadAssetAtPath(AssetDatabase.GetAssetPath(item)); UpdateAssetIcon(obj, item.icon); }); } public static List FindAssetsByType() where T : Object { List assets = new List(); string[] guids = AssetDatabase.FindAssets(string.Format("t:{0}", typeof(T))); for (int i = 0; i < guids.Length; i++) { string assetPath = AssetDatabase.GUIDToAssetPath(guids[i]); T asset = AssetDatabase.LoadAssetAtPath(assetPath); if (asset != null) { assets.Add(asset); } } return assets; } public static void UpdateAssetIcon(Object asset, Sprite icon) { if (icon && icon.texture) { EditorGUIUtility.SetIconForObject(asset, icon.texture); } } } } ---------- **Desired behavior:** On load, take each Item and replace its asset icon with the appropriate item icon. **Actual behavior:** On load, the icon for each item is set to whichever one was processed last. Any idea what's going on here?

Viewing all articles
Browse latest Browse all 271

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>