[英]Custom Icon on ScriptableObject on Unity3d
我為游戲制作了一些物品,使開發變得更容易,我希望在物品中添加自定義圖標ScriptableObjects
,該如何做? 我知道將圖標放在與腳本名稱相同的Gizmo文件夾中的技巧,但是對於具有相同腳本的不同項目,圖標應該有所不同
您可以將RawImage字段添加到可編寫腳本的對象中。
[SerializeField] RawImage imageIcon;
編輯以回答您的其他問題:
另外,您可以簽出此資產包並根據數據創建圖標: https : //assetstore.unity.com/packages/tools/gui/asseticons-100547
public StateMachine Target {
get {
return this.target as StateMachine;
}
}
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.