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(); 
    }
}
相关推荐
an86950019 小时前
unity如何在visual studio中打断点debug
unity·游戏引擎·visual studio
xcLeigh9 小时前
Unity基础:使用Transform控制物体移动——Translate与position详解
unity·游戏引擎
FairGuard手游加固11 小时前
Unity小游戏加密:global-metadata.dat与AssetBundle保护
游戏·unity·游戏引擎
狂人开飞机12 小时前
11、UI系统
游戏引擎·godot
真鬼12312 小时前
【Unity AI】Untiy链接cursor与MCP
unity·游戏引擎
WarPigs14 小时前
Unity设置人物位置无效的原因
unity
程序员正茂14 小时前
Unity3d行为树Behavior Designer Pro
unity·行为树
郝学胜-神的一滴15 小时前
C++11 工程级应用 10:减少拷贝,让容器跑得更快
服务器·开发语言·c++·游戏引擎·opengl
玖玥拾16 小时前
Lua 基础语法(八) Unity Huatuo (HybridCLR)
开发语言·unity·游戏引擎·lua