簡體   English   中英

Unity3d上ScriptableObject上的自定義圖標

[英]Custom Icon on ScriptableObject on Unity3d

我為游戲制作了一些物品,使開發變得更容易,我希望在物品中添加自定義圖標ScriptableObjects ,該如何做? 我知道將圖標放在與腳本名稱相同的Gizmo文件夾中的技巧,但是對於具有相同腳本的不同項目,圖標應該有所不同

您可以將RawImage字段添加到可編寫腳本的對象中。

[SerializeField] RawImage imageIcon;

編輯以回答您的其他問題:

  1. 使用可編寫腳本的對象創建新對象
  2. 單擊新創建的對象
  3. 查看檢查器,然后單擊圖標: 在此處輸入圖片說明
  4. 點擊其他
  5. 選擇您的圖像。

另外,您可以簽出此資產包並根據數據創建圖標: https : //assetstore.unity.com/packages/tools/gui/asseticons-100547

  1. 在ScriptableObject子類中創建字段“ icon”;
  2. 為您的ScriptableObject子類創建自定義編輯器;
  3. 在編輯器中創建Target屬性


    public StateMachine Target {
                get {
                    return this.target as StateMachine;
                }
        }

  1. 覆蓋此方法


    public override Texture2D RenderStaticPreview(string assetPath, UnityEngine.Object[] subAssets, int width, int height) {


            Texture2D newIcon = new Texture2D(width, height);


            if (Target.icon != null) {
                EditorUtility.CopySerialized(Target.icon, newIcon);
                return newIcon;
            } else {

                Texture2D defaultCustomIcon = AssetDatabase.LoadAssetAtPath("Assets/WinxProduction/Editor/Editor Default Resources/StateMachine Icon.png", typeof(Texture2D)) as Texture2D;

                if (defaultCustomIcon != null) {




                   EditorUtility.CopySerialized(defaultCustomIcon, newIcon);

                    Target.icon=newIcon;

                    AssetDatabase.AddObjectToAsset(newIcon,Target);

                    EditorUtility.SetDirty(Target);

                    return newIcon;
                }
            }

            return base.RenderStaticPreview(assetPath, subAssets, width, height);
        }

首次使用Unity Loads時,將使用默認的Icon並保存所有自定義子類ScriptableObjects。 如果您想使用其他圖標,則默認情況下,您可以創建如下功能:



    protected void OnClickBrowseForNewIcon() {

                    string path=EditorUtility.OpenFilePanelWithFilters("Select icon","Assets",new string[]{"Icon files", "png",});

                    if(!string.IsNullOrEmpty(path)){

                        Target.icon=AssetDatabase.LoadAssetAtPath(AssetDatabaseUtility.AbsoluteUrlToAssets(path));

                        EditorUtility.SetDirty(Target);

                    }
                }

相對於絕對



    public static class AssetDatabaseUtility
        {

            public static string AbsoluteUrlToAssets(string absoluteUrl)
            {
                Uri fullPath = new Uri (absoluteUrl, UriKind.Absolute);
                Uri relRoot = new Uri (Application.dataPath, UriKind.Absolute);

                return relRoot.MakeRelativeUri (fullPath).ToString ();


            }
        }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM