unity3D 编辑器扩展,设置应用图标

您所在的位置:网站首页 unity编译设置窗口在哪个文件夹 unity3D 编辑器扩展,设置应用图标

unity3D 编辑器扩展,设置应用图标

2023-10-04 16:36| 来源: 网络整理| 查看: 265

Unity 2018的Android平台Icon怎样设置,自己打开Unity去看下:

File->Build Settings->Player Settings->android 平台

可以看到有很多个icon需要设置:

 

你可以手动拖拽icon图片到对应的位置。

但是代码如何设置呢?

就图来看,也就是说,新版的2018需要设置3种类型的Icon,那么需要如何设置呢,现在把代码放上去。

public class AutoIconSet : Editor { //必须和存放Icon的文件夹路径一直,否则获得的Texture2D将会为空 private static readonly string Icon_Path = @"Assets\Arts\Icons\{0}\{1}.png"; [MenuItem("IconSet/App")] public static void SetAppIcons() { SetIcons("APP"); } private static void SetIcons(string iconPrefixName) { int[] iconSizes = PlayerSettings.GetIconSizesForTargetGroup(BuildTargetGroup.Android); Texture2D[] texArray = new Texture2D[iconSizes.Length]; for (int i = 0; i < iconSizes.Length; ++i) { int iconSize = iconSizes[i]; Texture2D tex2D = AssetDatabase.LoadAssetAtPath(string.Format(Icon_Path, iconPrefixName, iconSize), typeof(Texture2D)) as Texture2D; texArray[i] = tex2D; } //此处为新API var platform = BuildTargetGroup.Android; //kind有3种,分别对应PlayerSettings的Legacy,Round,Adaptive var kind = UnityEditor.Android.AndroidPlatformIconKind.Round; var icons = PlayerSettings.GetPlatformIcons(platform, kind); for (int i = 0, length = icons.Length; i < length; ++i) { //将转换后获得的Texture2D数组,逐个赋值给icons icons[i].SetTexture(texArray[i]); } PlayerSettings.SetPlatformIcons(platform, kind, icons); //新API结束 AssetDatabase.SaveAssets(); Debug.LogFormat("Set {0} Icon Complete", iconPrefixName); } }

这样Unity窗口上就会有,点击一下App,就能自动为自己的项目设置Icon了。此外,如果出现Set Icon Complete的log,但是却看不见PlayerSettings里有显示,可以检查一下Icon的存放路径和脚本里的Icon_Path是否填写一致。

=====================分割线==================

很快就根据Android,IOS平台之分,以及N种Icon类型,修改了这个脚本,使得脚本可以由外部自由选择来决定平台和Icon类型

同时不再由代码设置文件夹,需要自己根据Unity的要求创建相应的文件夹,这样保证一一对应,来对Icon进行设置

文件夹展示:

脚本的话,进行如下增删:

using UnityEngine; using UnityEditor; using System.IO; public class AutoIconSet : Editor { private static readonly string Icon_Path = @"Assets\Arts\Icons\{0}\{1}\{2}.png"; [MenuItem("IconSet/Android/Adaptive")] public static void SetAndroidAdaptive() { SetIcons(BuildTargetGroup.Android, UnityEditor.Android.AndroidPlatformIconKind.Adaptive); } [MenuItem("IconSet/Android/Round")] public static void SetAndroidRound() { SetIcons(BuildTargetGroup.Android, UnityEditor.Android.AndroidPlatformIconKind.Round); } [MenuItem("IconSet/Android/Legacy")] public static void SetAndroidLegacy() { SetIcons(BuildTargetGroup.Android, UnityEditor.Android.AndroidPlatformIconKind.Legacy); } [MenuItem("IconSet/iOS/Application")] public static void SetiOSApplication() { SetIcons(BuildTargetGroup.iOS, UnityEditor.iOS.iOSPlatformIconKind.Application); } [MenuItem("IconSet/iOS/Spotlight")] public static void SetiOSSpotlight() { SetIcons(BuildTargetGroup.iOS, UnityEditor.iOS.iOSPlatformIconKind.Spotlight); } [MenuItem("IconSet/iOS/Settings")] public static void SetiOSSettings() { SetIcons(BuildTargetGroup.iOS, UnityEditor.iOS.iOSPlatformIconKind.Settings); } [MenuItem("IconSet/iOS/Notifications")] public static void SetiOSNotifications() { SetIcons(BuildTargetGroup.iOS, UnityEditor.iOS.iOSPlatformIconKind.Notification); } [MenuItem("IconSet/iOS/Marketing")] public static void SetiOSMarketing() { SetIcons(BuildTargetGroup.iOS, UnityEditor.iOS.iOSPlatformIconKind.Marketing); } private static Texture2D[] GetIconsFromAsset(BuildTargetGroup target, PlatformIconKind kind, PlatformIcon[] icons) { Texture2D[] texArray = new Texture2D[icons.Length]; //因为Android设置会带有" API (xx)"等附加信息,为了文件夹不出现空格,只取空格前单词 string folder = kind.ToString().Split(' ')[0]; string filename; for (int i = 0; i < texArray.Length; ++i) { //不需要再通过GetIconSizesForTargetGroup了来获得Icon尺寸数组, //直接由对应的PlatformIcon.width来获取Icon大小 int iconSize = icons[i].width; filename = string.Format(Icon_Path, target, folder, iconSize); if (!File.Exists(filename)) { Debug.LogErrorFormat("图片文件不存在, 路径为:{0}", filename); continue; } Texture2D tex2D = AssetDatabase.LoadAssetAtPath(filename, typeof(Texture2D)) as Texture2D; texArray[i] = tex2D; } return texArray; } private static void SetIcons(BuildTargetGroup platform, PlatformIconKind kind) { //获得当前平台和当前Icon类型的PlatformIcon数组 PlatformIcon[] icons = PlayerSettings.GetPlatformIcons(platform, kind); //将Asset转为Texture2D Texture2D[] iconSources = GetIconsFromAsset(platform, kind, icons); for (int i = 0, length = icons.Length; i < length; ++i) { icons[i].SetTexture(iconSources[i]); } PlayerSettings.SetPlatformIcons(platform, kind, icons); AssetDatabase.SaveAssets(); Debug.LogFormat("Set {0}/{1} Icon Complete", platform, kind); } }

这样,通过自己编写Editor函数来选择平台和Icon类型,使得代码更加灵活。如图:

 

本文从此处转载:https://blog.csdn.net/DoyoFish/article/details/103891972



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3