Unity发布PC软件图标不能改变

版本

Unity3.6f1c1

问题

一个项目需发布多个PC程序,每个程序图标不一致。

测试方式1. 使用API设置图标,发布程序后,软件图标和API设置Icon不一致。

测试方式2. 手动设置Default Icon,发布程序后,软件图标和Defatul Icon不一致。

解决方法1

使用工具ResourceHacker 修改发布程序的图标

需要制作ICO图标

制作ICO图标

方式1:搜索相关网站,提供jpg图标,导出ico

方式2:创建同版本Unity项目,设置默认Icon,导出程序,使用ResourceHacker提取ICO图标。

替换图标

exe拖拽到工具面板,选择Icon Group,点击Replace Icon

解决方法2

问题原因 :Override for windows Max Linux被勾选,图标覆盖了Default Icon。

取消勾选 Override for windows Max Linux,手动设置Default Icon

API设置icon

方案1:使用方式2API设置默认图标,不勾选override for window,default icon起作用,

方案2:使用方式1和方式3API设置icon,自动启用override,默认图标不起作用。

csharp 复制代码
using UnityEditor;
using UnityEditor.Build;
using UnityEngine;
public class BuildSoftware
{
    public class SoftwareInfo
    {
        public string appName;//软件名称
        public string companyName;//公司名称
        public string iconPath;//图标路径
    }

    private readonly static SoftwareInfo[] configs =
    {
        new SoftwareInfo()
        {
            appName="A",
            companyName="DefaultCompany",
            iconPath="Assets/A.png",
        },
        new SoftwareInfo()
        {
            appName="B",
            companyName="DefaultCompany",
            iconPath="Assets/B.png",
        },
    };

    [MenuItem("SetSoftwareInfo/A")]
    private static void BuildA()
    {
        SetSoftwareInfo(configs[0]);
    }

    [MenuItem("SetSoftwareInfo/B")]
    private static void BuildB()
    {
        SetSoftwareInfo(configs[1]);
    }

    private static void SetSoftwareInfo(SoftwareInfo config)
    {
        PlayerSettings.companyName = config.companyName;
        PlayerSettings.productName = config.appName;

        Texture2D icon = AssetDatabase.LoadAssetAtPath<Texture2D>(config.iconPath);

        if (icon == null)
        {
            Debug.LogError($"未找到图标: {config.iconPath}");
            return;
        }

        //方式1 设置图标 会自动启用override for window mac linux 不影响default icon
        /* int iconCount = PlayerSettings.GetIconSizesForTargetGroup(
        BuildTargetGroup.Standalone).Length;

         // 2. 创建正确长度的数组,并用同一张图标填充所有槽位
         Texture2D[] icons = new Texture2D[iconCount];
         for (int i = 0; i < iconCount; i++)
         {
             icons[i] = icon;
         }

         // 3. 现在数组长度匹配了,可以成功设置
         PlayerSettings.SetIconsForTargetGroup(BuildTargetGroup.Standalone, icons);*/


        //方式2 设置默认icon 不会自动启用override for window mac linux
        PlayerSettings.SetIcons(
            NamedBuildTarget.Unknown,
            new Texture2D[] { icon },
            IconKind.Any
        );


        //方式3 自动启用override for window mac linux 不影响default icon
        /*int iconCount = PlayerSettings.GetIconSizes(
       NamedBuildTarget.Standalone, IconKind.Application).Length;

        Texture2D[] icons = new Texture2D[iconCount];
        for (int i = 0; i < iconCount; i++) icons[i] = icon;

        PlayerSettings.SetIcons(
            NamedBuildTarget.Standalone, icons, IconKind.Application);*/

        AssetDatabase.SaveAssets(); 
    }
}
相关推荐
淡海水3 小时前
08-02-优化-LINQ与函数式编程的GC代价
unity·c#·.netcore·linq·gc
警醒与鞭策16 小时前
Codex桌面版与Claude桌面版使用设置
android·unity·ai·性能优化
xcLeigh18 小时前
Unity基础:Destroy与DestroyImmediate——正确销毁游戏物体的方式
游戏·unity·游戏引擎·教程
lllhhh_远方1 天前
unity中URP场景阴影锯齿严重解决方案
unity·游戏引擎
淡海水1 天前
07-06-源码-.NET Core GC的极致优化技术
unity·架构·c#·.netcore·gc·1024程序员节
野区捕龙为宠1 天前
Unity 中使用 UnityWebRequest 加载 StreamingAssets 文件夹中的图片
unity·游戏引擎
北里闻箫1 天前
推荐一款游戏引擎,一剑十八年引擎(YiJian18-Engine) - 跨平台2D/3D ECS 游戏引擎
3d·游戏引擎
淡海水2 天前
07-02-源码-.NET Core GC分配路径
算法·unity·c#·.netcore·gc·1024程序员节
FFFFujige2 天前
【Unity】基于Dots + Luban的Buff模块
unity·游戏引擎
紫龙大侠2 天前
Unity许可证文件(激活成功后)默认保存位置
unity