Unity 游戏的嵌套

问题描述 投票:0回答:1

尊敬的 Stackoverflow 社区,您好,

我正在开发一个 Unity2D 游戏,目前,我想添加在我的游戏中玩其他嵌套游戏的功能。目前,我决定在项目中为每个游戏创建文件夹。每个游戏都有自己的场景和一组名为“NestedGame1_NameOfTheScript”的脚本。此外,每个游戏都会有自己的精灵、预制件等。但是,我觉得这种方法可能不是最佳的。 此外,如果我决定将一个现成的游戏添加到项目中,并且其脚本的名称可能已在我的项目中使用,那么这种方法将是不切实际的。重命名它们并更改代码中的所有连接将非常困难,并且可能会导致问题和错误。

也许有人遇到过类似的情况并且知道更优化的方法和架构解决方案?

unity-game-engine architecture game-development game-engine
1个回答
0
投票

我的方法是将这些“现成的”游戏编码在单独的统一项目中,并将它们导出为资产包并在运行时加载它们。 理想情况下,您将在单独的项目中拥有一个共享代码库,因此每个游戏项目都引用相同的库(接口、与主机游戏的通信等),并且每个游戏都有自己的解决方案以及自己的逻辑和游戏数据。

请注意,您无法从资源包加载可执行代码,但如果您的目标是 .NET 构建,则可以加载 DLL。这样,您就可以添加或删除游戏,而无需更改主游戏可执行文件,只需获取 json 或类似的文件,并引用要加载的 assetbundles 和 DLL。此外,IL2CPP 无法加载 .Net DLLs。因此,如果您的目标是 IL2CPP,则需要将代码放在主项目中,这也是最简单的方法。使用命名空间和 asmdef 将它们放在主项目内的单独文件夹中。缺点是对任何项目(包括主游戏)的任何修改或修复都意味着您需要重新构建整个游戏。

顺便说一句,要有效地拥有具有相同名称的单独类,您需要使用

命名空间。仅使用文件夹并不能保证您不会出现类名冲突,因为编译数据中并不真正存在文件夹。 程序集定义 (asmdef) 只能带你到目前为止,因为它们将文件夹内的代码编译到单独的库中,但如果库没有用命名空间分隔,仍然会发生名称冲突。

编辑:我刚刚记得在运行时加载 DLL 有一些限制。如果我没记错的话,DLL 应该具有相同的功能和定义,以及相同的“版本”。假设您修改了一个共享 DLL,并且其中一个迷你游戏是使用旧版本构建的,函数调用可能已过时,并且该过程将无法正常工作。我的意思是,修改任何共享库的最安全方法是重建使用该库的所有项目。但是,您可以通过一些

脚本来触发unity构建(使用构建参数启动Unity)。

© www.soinside.com 2019 - 2024. All rights reserved.