升级到Unity 5后,res/raw中的Android library Plugin.js文件出现问题

升级到Unity 5后,res/raw中的Android library Plugin.js文件出现问题,android,unity3d,assets,Android,Unity3d,Assets,我正在为一个库使用一个Android Unity插件,它遵循了之前Unity 5建议的结构,并且工作得非常好。软件包将必要的文件放在jar文件所在的Assets/Plugins/Android下,以及库使用的Assets/Plugins/Android/res/raw some.js和.css文件文件夹中。一切都很正常,但是当升级到Unity 5时,出现了数百个关于.js和.css文件的错误。(如在特定行插入分号,或在该行插入预期标记等) 我知道Unity 5中的变化,特别是这里提到的:,但是我

我正在为一个库使用一个Android Unity插件,它遵循了之前Unity 5建议的结构,并且工作得非常好。软件包将必要的文件放在jar文件所在的Assets/Plugins/Android下,以及库使用的Assets/Plugins/Android/res/raw some.js和.css文件文件夹中。一切都很正常,但是当升级到Unity 5时,出现了数百个关于.js和.css文件的错误。(如在特定行插入分号,或在该行插入预期标记等)


我知道Unity 5中的变化,特别是这里提到的:,但是我找不到一个合适的解决方案来解决这个问题。因此,我认为问题在于Unity试图将这些文件解析为与c#文件不同的东西,很可能是导致错误的c#文件。如何从该过程中排除Assets/Plugins/Android/res/raw中的文件,或者至少如何处理这种情况。我必须用新的Unity 5重新构造文件层次结构吗?据我所知,它们可以保持相同的结构以实现向后兼容性。

我们的一个项目也遇到了类似的问题,似乎没有办法阻止unity(至少尝试)编译所有脚本。此时,unity希望
.js
文件是“unity脚本文件”,并尝试编译它们,当
.js
文件是某种web文件时,编译失败

我必须承认,我不知道为什么unity将行为从4.x更改为5,因为在unity版本5之前,文件夹确实从编译中跳过了。另请参见下面的“特定文件夹”部分

可能的解决方案 1.将可能的脚本文件放在特定文件夹中 有一些特定的文件夹,unity不会尝试在其中编译您的文件,例如
WebPlayerTemplates

2.重命名潜在的脚本文件 由于unity编译只会对某些文件(例如
.cs
.js
)执行,因此您可以通过将它们重命名为
.js.
来避免编译


当然,如果您不相应地调整插件,这两种解决方案首先都会破坏您的插件

但是您可以做的是,使用预构建钩子恢复更改(重命名或移回文件),并使插件在设备上工作。 并且在构建之后,为了避免编译(错误)


如何做到这一点 只需创建一个自定义构建脚本(必须存储在
编辑器
文件夹中,例如
资产/Editor
)。您将在unity中找到一个名为
Build
的新菜单,其中有一个条目
CustomBuild
,您可以(而且必须)在其中开始构建

最低版本:

using UnityEditor;
using UnityEngine;

public class BuildProcessor {

    [MenuItem ("Build/Custom Build", false, 0)]
    static void CustomBuild() {
        PreProcess();
        BuildPipeline.BuildPlayer(new string[] { "your-main-scene.unity" }, "build-output-dir", BuildTarget.Android, BuildOptions.None);
        PostProcess(); 
    }

    static void PreProcess() {
        //Your pre-process here (e.g. rename all files from .js_ to .js)
    }

    static void PostProcess() {
        //Your post-process here (e.g. rename all files back from .js to .js_)
    }
}
  • 更高级的脚本可以在网上找到,也可以在这里随意添加您的创意;-) 我在这里得到了一些启发:

  • 有关如何重命名一组文件,您可能希望查看此帖子:


我希望这将以某种方式满足您的需求,如果您不清楚,请告诉我。

我不是unity的farmiliar,但我在webview方面也有类似的问题。。。我通过将文件从/raw/移动到/assets/…解决了这个问题。。。你能试试同样的吗?谢谢Bojan,但是这意味着我也必须更改库,因为它正在/raw文件夹中查找。Unity 5中的编译器是否未解析assets文件夹?是的,您需要尝试从assetsHey Bojan解析。这不起作用,原因有二。看起来Unity仍然解析assets文件夹,所以问题仍然存在。其次,我正在寻找一个不改变第三方sdk库的解决方案Hey d4Rk感谢您的回答。然而,这并不能解决问题,因为我不想强迫任何人自定义构建以避免js文件的问题。根据我现在的理解,Unity 5建议使用.aar文件而不是经典的plugins/Android/res/raw文件夹来创建Android插件。根据我的理解,对于.aar库项目,资源是打包的,解析器看不到这些资源。我仍在努力寻找一个更为坚实的解决方案