【游戏开发进阶】Unity Windows游戏安装包制作:从零到一构建专业级Setup.exe(含UI美化与自动化脚本)

【游戏开发进阶】Unity Windows游戏安装包制作:从零到一构建专业级Setup.exe(含UI美化与自动化脚本) 1. 环境准备与基础概念在开始制作Unity游戏的Windows安装包前我们需要准备好必要的工具和环境。首先确保你已经完成了Unity项目的开发并通过Unity的Build功能生成了Windows平台的.exe文件和配套的Data文件夹。这两个文件是制作安装包的基础。接下来需要安装NSISNullsoft Scriptable Install System这是一个开源的Windows安装包制作工具。它轻量灵活支持脚本化定制非常适合独立开发者使用。你可以从NSIS官网下载最新版本安装过程非常简单一路Next即可。安装完成后建议再安装一个NSIS的皮肤插件nsNiuniuSkin。这个插件可以让我们轻松制作出漂亮的安装界面而不是NSIS默认的那种老旧风格。安装方法也很简单下载插件后将其解压到NSIS的安装目录下的Plugins文件夹中即可。2. 组织安装文件结构在开始编写NSIS脚本前我们需要先组织好安装包所需的文件。创建一个新的文件夹作为工作目录我通常命名为SetupBuilder。在这个文件夹中创建以下子文件夹Source存放Unity生成的.exe和Data文件夹Output最终生成的安装包将放在这里Resources存放安装包所需的图标、许可协议等资源文件Scripts存放NSIS脚本文件将Unity生成的.exe和Data文件夹复制到Source文件夹中。如果你想让安装包看起来更专业还需要准备以下资源文件应用程序图标.ico格式卸载程序图标许可协议文件.rtf格式安装界面背景图片各种按钮的状态图片正常、悬停、按下状态把这些文件都放到Resources文件夹中。这样我们的文件结构就清晰了接下来可以开始编写NSIS脚本。3. 编写基础NSIS脚本NSIS脚本是控制安装过程的核心它使用一种特定的脚本语言。我们先创建一个最基本的安装脚本。在Scripts文件夹中新建一个文件命名为game_installer.nsi。脚本的开头需要定义一些基本信息!define PRODUCT_NAME 我的游戏 !define PRODUCT_VERSION 1.0.0 !define PRODUCT_PUBLISHER 我的工作室 !define PRODUCT_WEB_SITE http://www.mywebsite.com !define PRODUCT_DIR_REGKEY Software\Microsoft\Windows\CurrentVersion\App Paths\${PRODUCT_NAME}.exe !define PRODUCT_UNINST_KEY Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME} !define PRODUCT_UNINST_ROOT_KEY HKLM这些定义将在脚本的多个地方使用方便统一修改。接下来设置安装包的基本属性Name ${PRODUCT_NAME} ${PRODUCT_VERSION} OutFile ..\Output\${PRODUCT_NAME}_Setup.exe InstallDir $PROGRAMFILES\${PRODUCT_NAME} InstallDirRegKey HKLM ${PRODUCT_DIR_REGKEY} ShowInstDetails show ShowUnInstDetails show然后我们需要定义安装页面的顺序。NSIS使用宏来控制页面流程!include MUI2.nsh !define MUI_ABORTWARNING !define MUI_ICON ..\Resources\install.ico !define MUI_UNICON ..\Resources\uninstall.ico !insertmacro MUI_PAGE_WELCOME !insertmacro MUI_PAGE_LICENSE ..\Resources\license.rtf !insertmacro MUI_PAGE_DIRECTORY !insertmacro MUI_PAGE_INSTFILES !insertmacro MUI_PAGE_FINISH !insertmacro MUI_UNPAGE_WELCOME !insertmacro MUI_UNPAGE_CONFIRM !insertmacro MUI_UNPAGE_INSTFILES !insertmacro MUI_UNPAGE_FINISH !insertmacro MUI_LANGUAGE SimpChinese这段代码设置了安装和卸载过程中的页面顺序并指定了安装程序使用的图标。现在我们已经有了一个基本的脚本框架接下来可以添加实际的安装逻辑。4. 添加安装和卸载逻辑安装逻辑主要包括将游戏文件复制到目标目录、创建开始菜单快捷方式、添加卸载信息等。在脚本中添加以下内容Section 主程序 SEC01 SetOutPath $INSTDIR SetOverwrite try File ..\Source\MyGame.exe File /r ..\Source\MyGame_Data CreateDirectory $SMPROGRAMS\${PRODUCT_NAME} CreateShortCut $SMPROGRAMS\${PRODUCT_NAME}\${PRODUCT_NAME}.lnk $INSTDIR\MyGame.exe CreateShortCut $DESKTOP\${PRODUCT_NAME}.lnk $INSTDIR\MyGame.exe SectionEnd Section -Post WriteUninstaller $INSTDIR\uninst.exe WriteRegStr HKLM ${PRODUCT_DIR_REGKEY} $INSTDIR\MyGame.exe WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} ${PRODUCT_UNINST_KEY} DisplayName $(^Name) WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} ${PRODUCT_UNINST_KEY} UninstallString $INSTDIR\uninst.exe WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} ${PRODUCT_UNINST_KEY} DisplayIcon $INSTDIR\MyGame.exe WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} ${PRODUCT_UNINST_KEY} DisplayVersion ${PRODUCT_VERSION} WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} ${PRODUCT_UNINST_KEY} URLInfoAbout ${PRODUCT_WEB_SITE} WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} ${PRODUCT_UNINST_KEY} Publisher ${PRODUCT_PUBLISHER} SectionEnd卸载逻辑则需要删除安装的文件和注册表项Function un.onUninstSuccess HideWindow MessageBox MB_ICONINFORMATION|MB_OK $(^Name) 已成功从你的计算机移除。 FunctionEnd Function un.onInit MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 确定要完全移除 $(^Name) 及其所有组件 IDYES 2 Abort FunctionEnd Section Uninstall Delete $INSTDIR\uninst.exe Delete $INSTDIR\MyGame.exe RMDir /r $INSTDIR\MyGame_Data Delete $SMPROGRAMS\${PRODUCT_NAME}\${PRODUCT_NAME}.lnk Delete $DESKTOP\${PRODUCT_NAME}.lnk RMDir $SMPROGRAMS\${PRODUCT_NAME} DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} ${PRODUCT_UNINST_KEY} DeleteRegKey HKLM ${PRODUCT_DIR_REGKEY} SetAutoClose true SectionEnd现在我们已经完成了一个基本的安装脚本可以生成功能完整的安装包了。但是界面还很简陋接下来我们将使用nsNiuniuSkin来美化安装界面。5. 使用nsNiuniuSkin美化安装界面nsNiuniuSkin是一个强大的NSIS皮肤插件可以让我们创建现代化的安装界面。首先需要在脚本开头添加对插件的引用!addplugindir .\Plugins\NiuniuSkin !include nsNiuniuSkin.nsh然后替换原来的页面定义代码改用nsNiuniuSkin的页面!define MUI_CUSTOMFUNCTION_GUIINIT myGuiInit Function myGuiInit nsNiuniuSkin::InitSkinSubPage skin\install.xml btnStartInstall btnCancel,btnClose Pop $hInstallDlg FunctionEnd !insertmacro MUI_PAGE_WELCOME !insertmacro MUI_PAGE_LICENSE ..\Resources\license.rtf !insertmacro MUI_PAGE_DIRECTORY !insertmacro MUI_PAGE_INSTFILES !insertmacro MUI_PAGE_FINISH接下来需要创建皮肤配置文件。在Resources文件夹中创建一个skin子文件夹然后创建以下XML文件install.xml - 主安装界面布局configpage.xml - 配置页面installingpage.xml - 安装进度页面finishpage.xml - 完成页面以install.xml为例内容大致如下VerticalLayout width480 height320 roundcorner5,5 bkimagefilebackground.png Label text欢迎安装 ${PRODUCT_NAME} font微软雅黑,16,#FF000000 padding20,20,20,10/ RichEdit nameeditDir text$INSTDIR textcolor0xFF000000 width360 height25/ Button namebtnBrowse text浏览... width80 height25/ HorizontalLayout width100% height40 padding0,20,0,0 Button namebtnCancel text取消 width100 height30/ Control width20/ Button namebtnNext text下一步 width100 height30/ /HorizontalLayout /VerticalLayout这些XML文件定义了安装界面的布局和样式。你可以根据需要调整颜色、大小、位置等属性甚至可以添加动画效果。记得把用到的图片资源也放到skin文件夹中。6. 添加多语言支持为了让安装包支持多种语言我们需要在脚本中添加多语言定义。首先定义语言字符串!insertmacro MUI_LANGUAGE English !insertmacro MUI_LANGUAGE SimpChinese LangString DESC_SEC01 ${LANG_ENGLISH} Main program files. LangString DESC_SEC01 ${LANG_SIMPCHINESE} 主程序文件。 LangString UNINST_SUCCESS ${LANG_ENGLISH} ${PRODUCT_NAME} was successfully removed from your computer. LangString UNINST_SUCCESS ${LANG_SIMPCHINESE} ${PRODUCT_NAME} 已成功从你的计算机移除。然后在适当的地方使用这些字符串比如在卸载成功提示中Function un.onUninstSuccess HideWindow MessageBox MB_ICONINFORMATION|MB_OK $(UNINST_SUCCESS) FunctionEnd为了让用户可以选择安装语言我们可以在安装开始时显示语言选择对话框Function .onInit !insertmacro MUI_LANGDLL_DISPLAY FunctionEnd这样用户在运行安装程序时会首先看到一个语言选择界面选择后整个安装过程都会使用该语言显示。7. 自动化构建脚本为了简化打包过程我们可以编写一个批处理脚本来自动完成所有步骤。创建一个build.bat文件内容如下echo off set UNITY_PATHC:\Program Files\Unity\Hub\Editor\2022.3.10f1\Editor\Unity.exe set PROJECT_PATHD:\MyGameProject set BUILD_PATH.\Source set NSIS_PATHC:\Program Files (x86)\NSIS\makensis.exe echo 正在构建Unity项目... %UNITY_PATH% -batchmode -quit -projectPath %PROJECT_PATH% -buildWindowsPlayer %BUILD_PATH%\MyGame.exe echo 正在编译安装程序... %NSIS_PATH% /DGameNameMyGame /DGameVersion1.0.0 .\Scripts\game_installer.nsi echo 构建完成 pause这个脚本会依次执行以下操作使用Unity命令行构建Windows平台的可执行文件使用NSIS编译安装脚本提示构建完成你可以根据需要修改路径和参数。为了更灵活还可以使用Python等脚本语言来编写更复杂的构建逻辑比如自动增加版本号、上传到服务器等。8. 高级功能与优化除了基本功能外我们还可以添加一些高级特性来提升用户体验安装前检查检查系统是否满足运行要求如DirectX版本、.NET Framework等自定义安装类型让用户选择完整安装或自定义安装组件安装后运行安装完成后自动启动游戏注册文件关联将特定文件类型关联到你的游戏下载额外内容在安装过程中下载更新或DLC例如添加安装前检查的代码Function CheckDirectX ClearErrors ReadRegStr $0 HKLM SOFTWARE\Microsoft\DirectX Version IfErrors 0 3 MessageBox MB_OK|MB_ICONSTOP 需要DirectX 11或更高版本。 Abort StrCpy $1 $0 1 3 IntCmp $1 9 3 0 3 MessageBox MB_OK|MB_ICONSTOP 需要DirectX 11或更高版本。 Abort FunctionEnd在安装开始时调用这个函数Function .onInit Call CheckDirectX !insertmacro MUI_LANGDLL_DISPLAY FunctionEnd通过这些优化你的安装包将更加专业和完善给用户留下良好的第一印象。