版本
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();
}
}