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

时间:2018-08-10 01:37:34

标签: c# unity3d plugins assetbundle

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

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

但是...

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

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

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

1 个答案:

答案 0 :(得分:1)

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

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

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

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

Unity文档:

编译: