1.UnityModManager的源码初次使用
2.编程工具篇06编译OpenCV+opencv_contrib
3.C#/Unity3D 入门 SourceGenerator
4.Unity引擎类游戏MOD制作通用教程
5.Unity加密Assembly-CSharp.dll
UnityModManager的初次使用
作为游戏爱好者兼程序员,游戏修改技术不可或缺,下载基础CE是源码入门必备。在探索Unity引擎类游戏修改时,下载曾使用过github.com/HearthSim/UnityModManager等通用解决方案,源码但开发体验并不理想。下载UC看 网页源码后来发现github.com/newman/UnityModManager提供了更佳的源码体验,这便是下载我的新旅程。
具体操作流程如下:首先,源码我将Assembly-CSharp.dll进行反编译,下载使用dotPeek工具,源码导出便于查找的下载工程。接着,源码根据修改需求,下载在代码中查找关键部分。源码例如,为了修改游戏保存机制,我找到了相关代码片段。
代码中提到,嗜血印游戏是通过调用两个函数实现保存功能的,理论上,我们可以直接调用这些函数来实现自定义的adroid源码在线保存操作。之后,我创建了一个mod工程,并在编译过程中遇到了一些错误。在Stack Overflow上找到了解决方案,成功解决了问题。
接下来,我按照官方文档的指引安装了mod,然后启动游戏进行测试。在尝试了“立即存档”的功能后,我发现成功地进行了存档操作,这证实了我的修改生效。此外,我了解到通过分析源代码,可以探索更多功能,比如通过HeroProperty.SaveSceneName(this.cjname)来切换场景等。这些都为我提供了无限可能的扩展空间。
整个过程中,我将所学所用记录下来,并分享到了代码库WingGao/WingUnityMods中,希望能为有相似需求的开发者提供一些参考和帮助。
编程工具篇编译OpenCV+opencv_contrib
在进行Unity:从零开始搞AR教程时,源码和组件我们需要集成ArUco功能,这就需要将opencv_contrib模块与opencv进行编译。以下是详细的编译步骤: 首先,访问CMake官网下载最新版本(如cmake-3..0-rc1-windows-x_.msi)并安装。 然后,去GitHub下载OpenCV(选择4.5.3版本)和opencv_contrib的源码,链接分别为:opencv-4.5.3-vc_vc.exe
Source code (zip)
下载后解压OpenCV和opencv_contrib的源码包。 接下来,使用CMake进行编译。在CMake的配置过程中,选择Visual Studio (根据你的系统调整),配置路径为opencv源代码目录和你想要生成二进制文件的位置。确保勾选"BUILD_opencv_world",并输入"OPENCV_EXTRA_MODULES_PATH"(如果有需要)。点击Configure,然后Generate,生成过程完成后进入build目录。 在build目录中,打开OpenCV.sln文件,选择“批生成”,勾选"ALL_BUILD"和"INSTALL",mapper example源码最后点击生成。编译完成后,头文件和动态库会在Install文件夹中找到。 最后一步,如果你已经在Windows系统上配置过OpenCV环境(参阅编程工具篇),则无需重复,直接使用生成的环境变量即可。如果之前未配置,建议参考相关教程进行设置或更新。C#/Unity3D 入门 SourceGenerator
C# Source Generators是一种在编译时生成额外C#代码的机制,旨在简化代码生成和提高性能。它们只添加代码,不修改已有代码,确保安全。下面将引导您如何在Unity中使用Source Generators以及它们的基本概念和API。
在Unity项目中使用Source Generators并不推荐,可新建一个控制台项目存放Source Generators代码。选择.NET Standard 2.0作为项目类型,注意目前只支持此版本。打开项目文件.csproj,添加`true`标签。ssr源码备份安装所需的NuGet包,确保版本兼容,目前Unity中仅支持3.8.0。
在生成器项目中,创建新的类,并添加`Generator`或`Generator[LanguageName.CSharp]`特性。实现`ISourceGenerator`接口。避免详细讨论源生成器API,后续会提供更详细的说明。遇到警告时,检查Roslyn编译器版本,确保符合NuGet包要求,可更新Visual Studio或降低版本。在VS中切换到发布模式,生成或重新生成项目,得到生成器dll文件,只拷贝此文件至Unity中,注意避免生成器dll进入包中。
在VS中添加内置的RoslynAnalyzer标签,并等待编译,源生成器将出现在项目中的引用->分析器列表中。在C#控制台项目里,直接添加源生成器引用,并手动补上`OutItemType`和`ReferenceOutputAssembly`属性。配置源生成器项目以在生成后自动拷贝到特定目录,使用bat脚本实现。
源生成器入门包括概述、表达式、语句、命名空间和引用的基本概念。了解这些概念有助于掌握源生成器的使用。初始化方法`Initialize`主要注册`SyntaxReceiver`以遍历语法节点,执行方法`Execute`则具体编写生成过程,围绕`context`进行操作。理解`SyntaxReceiver`、`context.AdditionalFiles`、`context.ParseOptions`、`context.AnalyzerConfigOptions`和`context.Compilation`属性有助于实现源生成器的功能。使用语法树(Syntax Tree)构建和操作代码是核心任务,通过查找和手动创建节点,将生成的源代码加入上下文参与编译。
若担心语法树构建过程复杂,可采用更简单的字符串拼接方式生成代码,避免名称冲突时使用`global::System.Buffers`进行引用,以防止与其他代码冲突。通过逐步学习和实践,源生成器将帮助您更高效地管理C#代码生成任务。
Unity引擎类游戏MOD制作通用教程
本教程旨在为Unity引擎类游戏MOD制作提供全面指导。以下将分五个部分详细介绍: 第一部分:必备工具软件Visual Studio :提供C++、C#语言开发环境。
dotPeek:.NET框架反编译工具,助于理解游戏业务逻辑。
UtralEdit或EditPlus:文本编辑工具,用于修改反编译文件。
上述工具功能概述如下:dotPeek将游戏文件Assembly-CSharp.dll反编译为Visual Studio 可编辑的.NET项目。
Visual Studio 用于查看反编译后源代码,理解游戏逻辑。
UtralEdit或EditPlus用于修改反编译后的Assembly-CSharp.il文件。
第二部分:DLL文件的反编译与重编译 1. 打开dotPeek,导入Assembly-CSharp.dll并导出为VS项目。2. 创建目录结构,复制Assembly-CSharp.dll至E:\Decompile\DLL。
3. 使用VS命令生成Assembly-CSharp.il文件。
4. 修改Assembly-CSharp.il后,重新编译为新Assembly-CSharp.dll。
5. 将新Assembly-CSharp.dll放置于游戏目录下的XXXX_Data\Managed目录,完成MOD制作。
第三部分:IL文件的修改 核心在于修改游戏逻辑。以修改角色负重值(倍)为例,步骤如下:在VS中搜索GetHeavy方法,标记关键代码。
使用文本编辑器修改Assembly-CSharp.il,替换指定代码。
保存文件并重新编译。
使用dotPeek验证修改效果。
第四部分:IL语言相关 IL是.NET平台的中间语言,由编译器转换为最终可执行代码。使用自定义IL帮助命令查询指令。解压工具,运行帮助命令显示详细信息。
配置文件记录指令与示例。
第五部分:MOD制作展望 未来工具可能包括:通用控制台插件DLL,兼容各种Unity游戏。
Java扩展的file命令,自动化替换Assembly-CSharp.il文件。
本教程旨在分享Unity引擎类游戏MOD制作流程及工具,欢迎广大玩家及开发者参与讨论。Unity加密Assembly-CSharp.dll
项目中的cs代码被打包进Assembly-CSharp.dll中,并通过Mono调用。项目的加密主要针对Assembly-CSharp.dll,加载时进行解密。采用xz库对Assembly-CSharp.dll进行加密和压缩后移位,解密过程则相反。加解密算法已定义好。
在Unity-Technologies/mono中实现解密。首先,从对应当前项目版本的mono源码中获取。然后,重新生成针对特定架构(如armeabi-v7a、x)的libmono.so。解密算法需应用在mono/metadata/image.c中的mono_image_open_from_data_with_name函数。生成libmono.so后,每次打包替换工程中的libmono.so。
生成libmono.so的步骤包括安装工具、修改源码、执行脚本生成so文件。注意优化选项,如使用-g去掉debug符号、--gc-sections去掉无用代码。优化后,so文件尺寸减小,性能提升。编译选项影响so文件是否可启动和性能。
加密过程为:每次打包后,都需要重新加密Assembly-CSharp.dll。编写加密工具,每次Unity导出Android工程或反编译apk包后,对Assembly-CSharp.dll进行加密。使用xz库进行压缩,确保文件体积减小。