繁体   English   中英

在Unity游戏中使用来自插件的游戏资源的正确方法是什么?

[英]What is correct way of using game resources from plugin in Unity game?

我使用Unity引擎创建游戏,并想要功能强大的插件系统。

  1. 插件作者可以使用Unity Asset Bundle将新资产添加到游戏中
  2. 插件作者可以使用C#运行时将新代码添加到游戏中,或者我甚至可以使用Asset Store中的此类插件,例如ModTool或UMod
  3. 如果我将插件编译为单独的.dll文件,则插件作者事件可以使用和扩展游戏中的代码

但...

插件作者如何在不复制资源的情况下重复使用我游戏中的资源(例如特定的着色器,材质,纹理或预制件)?

想象一下,那个作者想要创建特定的场景并使用我库中的许多现有对象,或者只是向其项目添加一些唯一的着色器。 我现在看到的唯一方法是将整个游戏导入为资产捆绑包,删除所有冗余部分,然后导出为插件资产捆绑包,但是在这种情况下,所有项目都将重复,批次将被破坏,插件的大小将变为充气。

这部分的主要问题是,我想将许多功能(Core以外的所有功能:例如,单元,建筑物等)视为单独的插件,这些插件可以重用一些Core代码和Core资源。

首先,我想指出一件事,您可能知道。 但是只是为了确保。

资产捆绑包中的脚本将是textAsset,因此不能作为脚本执行。如果您希望资产捆绑包具有可执行代码,则需要先将其预编译到程序集中,然后使用单反射将其加载。 请记住,这会使您的应用程序容易受到恶意代码侵害。 由于这种加载,Windows Store Apps和Windows Phone根本不支持从资产捆绑包中加载脚本,并且IOS上不提供反射功能,从而限制了您可以定位的平台。

重用基本游戏中已经存在的资源不是问题,只要您可以从assetbundles代码中访问场景中已经公开引用了该资源即可。 您可以通过拥有某种“主”组件来利用这一点,该组件拥有对所有公共资源的引用。

另一个选择是将希望插件获得访问权限的所有资源都存储在StreamingAssets文件夹中。请注意,尽管StreamingAssets文件夹中的资产将对每个人都可用,但是每个人都可以对其进行编辑。

Unity文档:

编译:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM