最近项目升级使用2018,突然发现2018的Icon设置变得复杂了起来(其实就是多了几个),如果想设置其余类型的Icon应该怎么操作,网上查了一些有用没用的,自己去官方API看了看之后整理了一下,在这里综合贴出来。

先展示下在下Icon的存放路径

原本在Unity2017设置Android端Icon相当简单,在这里直接贴上代码先

public class AutoIconSet : Editor
{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){//获取所有的Icon尺寸int[] iconSizes = PlayerSettings.GetIconSizesForTargetGroup(BuildTargetGroup.Android);Texture2D[] texArray = new Texture2D[iconSizes.Length];for (int i = 0; i < iconSizes.Length; ++i){int iconSize = iconSizes[i];//获得对应目录下的Icon,并转换成Texture2DTexture2D tex2D = AssetDatabase.LoadAssetAtPath(string.Format(Icon_Path, iconPrefixName, iconSize),typeof(Texture2D)) as Texture2D;texArray[i] = tex2D;}//设置到PlayerSettings的各个Icon上PlayerSettings.SetIconsForTargetGroup(BuildTargetGroup.Android, texArray);AssetDatabase.SaveAssets();Debug.LogFormat("Set {0} Icon Complete", iconPrefixName);}
}

以前2017的设置就完成了(2017Unity已经被我卸载了,所以贴图就贴不了了),今天我们主要看看2018。

(原本的代码其实也可以用,会默认设置到2018的Legacy类型的Icon中)

2018的Icon设置是这样的,与图:

展开后,

第一个相当长,没截图完毕,浏览一下自己的Unity设置就能看到了。

就图来看,也就是说,新版的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;}//此处为新APIvar platform = BuildTargetGroup.Android;//kind有3种,分别对应PlayerSettings的Legacy,Round,Adaptivevar kind = UnityEditor.Android.AndroidPlatformIconKind.Round;var icons = PlayerSettings.GetPlatformIcons(platform, kind);for (int i = 0, length = icons.Length; i < length; ++i){//将转换后获得的Texture2D数组,逐个赋值给iconsicons[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转为Texture2DTexture2D[] 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类型,使得代码更加灵活。如图:

有错误欢迎指出啊!

在Unity2018如何使用代码一键设置Icon相关推荐

  1. c# vscode 配置_[VSCode插件推荐] Code Runner: 代码一键运行,支持超过40种语言

    记得两年多前,笔者那时还在写 PHP,同时需要写 Python 和 Node.js .所以在那时,支持多种语言的 VS Code 已经是笔者的主力编辑器了.唯一不足的是,笔者希望在VS Code里,能 ...

  2. VS Code 神器插件:代码一键运行,支持超过 40 种语言!

    程序员转行学什么语言? https://edu.csdn.net/topic/ai30?utm_source= csdn_bw 记得两年多前,笔者那时还在写 PHP,同时需要写 Python 和 No ...

  3. Easy Code,IntelliJ IDEA中代码一键生成

    Easy Code,IntelliJ IDEA中代码一键生成 1. 安装插件 2. 连接数据库 2.1 添加数据库 2.2 添加数据库信息 3. 生成代码 EasyCode是基于IntelliJ ID ...

  4. 【毕业设计_课程设计】蓝牙灯:支持一键设置情景模式、无极调光调色

    文章目录 0 前言 1 功能简介 2 ATTitleBar 3 ReactiveCocoa 4 CBCentralManager 5 ATCarouselView 6 细节问题 7 Smart Lam ...

  5. iOS设置icon图标和启动页的详细设置

    一.ios的icon图标详细设置 icon图标的设置其实很简单主要两个步骤: (1)将图片添加进工程中 (2)在info.plist--->添加一个属性Icon files 其中红色标记为图片名 ...

  6. JavaWeb前后端代码一键生成

    JavaWeb前后端代码一键生成 生成包括controller层/Rest类.service层.实体类dao层(可不用), 实体类. 先说下,用编码配置方式: 1.Javabean生成 public ...

  7. 和平精英吃鸡助手微信小程序源码一键设置灵敏度键位捏脸

    这是一款吃鸡小助手类型的微信小程序源码 该小程序由键位,灵敏度,捏脸一键设置组合 小程序内的键位设置,灵敏度设置代码是由各大主播和职业选手那些分享的 然后改小程序通过全网采集而来 另外里面还有捏脸数据 ...

  8. [c#]一键设置popo猫回收站工具含源码

    功能介绍: [c#]一键设置popo猫回收站工具含源码 在抖音上看到挺好玩的,设置popo猫回收站图标,回收站内没有文件时嘴巴是张开的,当回收站内放置文件时嘴巴是闭合的. 其实功能实现很简单,准备两个 ...

  9. 前端摸鱼神器,CSS代码一键复制!

    最近遇到这样一件事: 这位设计小兄弟,说好只加 3 个页面,最后硬是加了 6 个页面,打工人何必为难打工人. 面对这两排页面,对于 CSS 原本就比较弱的我来说,简直噩梦.正当我苦恼着,突然想起上次同 ...

最新文章

  1. OTL调用Oracle存储过程
  2. win8.1平板安装ubuntu16.04的折腾
  3. FFmpeg学习1:视频解码
  4. 【solr基础教程之二】索引
  5. 云原生应用 Kubernetes 监控与弹性实践
  6. mysql 备份 windows_windows mysql 自动备份的几种方法
  7. 实现自动带密码登陆远程机执行shell命令(linux)
  8. 聚焦国内名企开源!OSCAR 开源先锋日(1020)全部议程首次曝光
  9. 高评分防火墙GlassWire:帮你监控、追踪和提升电脑安全
  10. 基于比较的排序算法集
  11. ISO27001认证办理流程及2022年补贴政策汇总
  12. PIXHAWK飞行模式
  13. vc 判断哪个按键 被按下 消息 按键 状态
  14. Nape实现坐标旋转角度回弹
  15. 黑马瑞吉外卖项目开发笔记
  16. 红米3 android驱动,红米3驱动最新版
  17. 每日加瓦,终成栋房7-Object、Date、DateFormat、Calendar、System、StringBuider、包装类
  18. 政府信息化与电子政务、企业信息化与电子商务、数据库和数据仓库的区别、商业智能系统处理过程、数据仓库结构图、数据挖掘、数据仓库和数据湖的对比
  19. Camera AF和FF
  20. 一个,两个,蓝精灵 (10 分)(Python)

热门文章

  1. 女生做软件测试的利弊如何权衡?
  2. 深刻揭露当今楼市中的七大谬论
  3. fsck.ext3:unable to resolve 'LABLE=/home'
  4. 计算机基础知识----课后习题
  5. 东芝计算机配置,东芝z830配置 东芝Z830-K02S参数【图文】
  6. 2021-11-05 springMVC 错误:org.springframework.http.converter.HttpMessageNotWritableException No conve
  7. 生命不息学习不止 分析几个大牛爱用的在线笔记工具
  8. 还记得那些老国手吗? 07
  9. 微信小程序多次跳转后不能点_微信突然更新,但我劝你这次别升级
  10. VO的实际应用;后端接收前端传入的值;实体类转化VO;PO,VO,DTO,BO,DAO,POJO区别