Assets/AxiProjectTools | ||
.gitignore | ||
README.md |
*本文仅作技术研究,因为合规原因,本文不提供任何法律敏感和版权相关的诸如SDK的文件。
前言和声明
Unity Switch 开发打包移植相关的一系列教程,by 皓月狩魂(sin365) axibug.com 初版分享:
声明: *文章和开源代码仓库,仅作技术研究,因为合规原因,不包含也提供任何法律敏感和版权相关的诸如SDK的文件。 *请自行获取,建议您使用官方授权的开发套件。 *谢绝讨论任何技术外的,诸如NS移植游戏开发的性质等无意义问题,我只是技术爱好者。相互尊重,相互学习。
文章:
1.Unity Switch 开发/打包/移植教程(包含如何重新Repack NSP,让捣鼓后的零售机运行) http://note.axibug.com/blog/post/akiragatsu/UnitySwitchDev
2.Unity下Switch开发文件存储踩坑,以及解决方案范例 (Unity Switch下不能用System.IO,只能用nn.fs) http://note.axibug.com/blog/post/akiragatsu/UnitySwitchDevForIO
3.Switch系统错误码,方便排查问题 (我AxiNSApi中也提供了转换打印,方便排查) http://note.axibug.com/blog/post/akiragatsu/SwitchErrCode
4.Switch TitleID规则 http://note.axibug.com/blog/post/akiragatsu/SwitchTitleID
工具仓库:
-
AxibugNSPTools Unity用自动化打包工具(自动完成NSP打包并Repack) https://github.com/sin365/AxibugNSPTools
-
AxiNSApi 已经封装好的Unity下Switch的用户访问,存储挂载,读写API,直接可用 https://github.com/sin365/AxiNSApi
再次申明,以上文章和仓库,不提供不包含任何敏感和版权文件,和授权开发者一样,仅讨论和演示上层使用经验交流。
祝君愉快,我爱Switch
—— 皓月 2025.4.8
具体说明
1. Nintendo SDK
这个我不会提供任何文件,或者建议您使用任天堂官方授权的开发套件(笑)
准备好Nintendo SDK之后,配置如下环境变量:
NINTENDO_SDK_ROOT -> 你的路径\NintendoSDK
NINTENDO_SDK_NEX_ROOT -> 你的路径\NintendoSDK-NEX
NINTENDO_SDK_NPLN_ROOT -> 你的路径\NintendoSDK-NPLN
NINTENDO_SDK_PIA_ROOT -> 你的路径\NintendoSDK-Pia6
安装dotnet SDK
因为Nintendo SDK依赖donetsdk的,在Nintendo Sdk中也直接包含dotnet sdk的安装文件(是doNet6).您也可以自行安装
这个建议一定要安装,缺少这个也是Unity打包异常的原因之一,否则你难以查找原因。
Unity Switch Support
同样,这个我不会提供任何文件,或者建议您使用任天堂官方授权的开发套件
准备和SDK对应版本的Unity Switch Support
安装Unity-AAAA版本
安装UnitySetup-Nintendo-Switch-Support-for-Editor-AAAA-SDK-BBBB-xxxxxxx.exe
占位符:
AAAA是Unity版本号
BBBB是Nintendo SDK版本号
关于Unity License
Nintendo Switch 并不需要特殊License或Unity Pro License,有一个License 就行
Unity 开发过程
这个就和其他常见Unity游戏开发方式,忽略……
有一些,平台差异的踩坑,类似正常的PC,IOS,Android的unity开发过程中一样,不同平台开发,有一些特定的平台兼容问题,或必须的差异做法。Switch也一样,有一些不同的兼容情况需要处理,后续踩坑,会详细讲述。但这个是游戏本身内容开发方面的,本文不在此赘述。
打包到Switch
因为Unity是针对官方授权开发而来,NSP是提交给Nintendo,由Nintendo审核签名后分发,才会是一个完整带NCA头文件信息的可安装NSP。
并不是Android那样,输出.apk,就万事大吉。
你大概率是没有Nintendo官方授权的开发套件的,按照官方套件,你打包出来的程序,只能在官方提供的开发机和测试机上运行,零售机是无法运行的。
要安装到零售机,切是已经折腾过的零售机(Hacked)
而且先决条件是,你提供的NSP是没有NCA签名等基本信息的,解决这个之后,才有安装的可能。
不解决的话,通过MTP之类的安装方式,都会报错,无法安装:
Invalid NCA Magic
正片开始
在此之前,请你先确保你Unity开发环境,能够选择Switch平台,成功Build出文件。
勾选 Create NSP File 是输入.nsp文件
不勾选 则是输出的文件夹形式的你的程序文件
若Unity并不能选择Switch平台,请检查你的Switch Support是否准备好并安装,
若打包的时候并不能找到SDK,请检查你的Nintendo SDK是否准备好,并配置好环境变量。
若IL2CPP问题,请按照Nintendo SDK解决。
还有先解决基本问题,比如你的代码,在Build上不要报错,或者Switch的一些宏之类的。
能输出文件,好,现在才可以往下看。
打包使其让零售机(已折腾的)可以安装和运行
前置1.提取固件Key
这是敏感操作,本文只是表示我自己的操作,对于操作的影响,本文不负任何责任。
你需要提取你SysNADA的key,这个固件密钥,是构建NCA等信息的关键。
请不要在网络上寻找key,即便找到也是不可用的。
请自行提取。
下载 lockpick_rcm.bin,复制到TF卡\bootloader\payloads (如果你的折腾机已经整合,可以不下载)
hekate界面,选择PayLoad(有些中文汉化了,叫有效载荷)
PayLoad中选择lockpick_rcm
进入lockpick_rcm之后,音量加减按钮是菜单上下选择,电源键是确定。
我们选择 Dump from SysNADA,很快会将你的key保存到SDK上。
退出Lockpick
在SDK中会有这三个文件,将他拷贝到你的电脑上。
sd:/switch/prod.keys
sd:/switch/title.keys
sd:/switch/dev.keys
你可以使用它,因为你合法拥有你的switch设备,但请仅自己提取使用,不要再网上分享或传播你的文件。避免一些法律风险,和避免您的设备敏感信息被泄露。
前置2.确定一个titleid
自己定一个titleid,确保和现有所有已发行的游戏或者自制游戏的TitleID不一样,
可以去GBAtemp之类的论坛,查重。
并在Unity PlayerSetting中设置TitleID
使用 AxibugNSPTools 重新打包NSP
- 这工具由我提供,工具内不提供也不包含任何Nintendo SDK版权相关的任何内容。只是当你合法拥有Nintendo SDK时,本工具全自动化帮你调用
- 即本工具调用和操作的任何文件,都是您提供的合法文件,本工具不包含。给合法授权的开发者使用的。请遵守相关规定。
本工具自动化调用您提供的合法Nintendo SDK获取包的详细信息,并基于您提供的合法prod.keys,生成NAC,帮助您调用hacpack,最终repack一个新的NSP,使其可以在已经被折腾的Switch上,成功安装NSP文件。
- 拷贝keys
AxibugNSPTools 是编写给Unity的工具插件,AxibugNSPTools,到您的项目目录.
将您合法提取的prod.keys、title.keys、dev.keys拷贝到Assets/AxiProjectTools/AxiNSPack/switch_keys目录中。 (注:您的项目若有提交git等公开仓库时,请忽略Assets/AxiProjectTools/AxiNSPack/switch_keys/*.keys , 以免泄露由您设备提取的key)
*若没有prod.keys,程序repack时会提示您。
- 确保先前配置的Nintendo_SDK_ROOT环境变量
*若没有Nintendo_SDK_ROOT环境变量,程序repack时会提示您。
功能1. :RepackNSP(仅重新构建NPS)
这个是把现有的Unity 输出的NSP(且无其他任何修改),重新构建,使其repack一个新的NSP,折腾后的零售Switch可以直接安装。
Unity Editor菜单上选择:Axibug移植工具/Switch/AxibugNSPTools/RepackNSP(仅重新构建NPS)
等待执行完毕
通过MTP等方式安装到Switch测试
功能2. :Build With RepackNSP(打包NSP并重新构建NPS)
这个是自动调用Unity Build一个NSP之后,再自动调用RepackNSP,重新构建,使其repack一个新的NSP,折腾后的零售Switch可以直接安装。
Unity Editor菜单上选择:Axibug移植工具/Switch/AxibugNSPTools/Build With RepackNSP(打包NSP并重新构建NPS)
等待执行完毕
通过MTP等方式安装到Switch测试