【问题标题】:Issue with Android library Plugin .js files in res/raw after upgrading to Unity 5升级到 Unity 5 后,res/raw 中的 Android 库插件 .js 文件出现问题
【发布时间】:2015-04-06 15:42:54
【问题描述】:

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

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

【问题讨论】:

  • 我不熟悉 unity,但我在使用 webview 时遇到了类似的问题...我通过将文件从 /raw/ 移动到 /assets/ 解决了这个问题...你可以尝试同样的方法吗?
  • 谢谢 Bojan,但这意味着我也必须更改库,因为它正在 /raw 文件夹中查找。 Unity 5 中的编译器是否未解析 assets 文件夹?
  • 是的,你需要尝试从资产中解析
  • 嘿,Bojan,这不起作用有两个原因。 Unity 似乎仍在解析资产文件夹,因此问题仍然存在。其次,我正在寻找一种无需更改第三方 sdk 库的解决方案

标签: android unity3d assets


【解决方案1】:

我们的一个项目遇到了类似的问题,似乎没有办法阻止统一(至少,尝试)编译所有脚本。此时,unity 预计 .js 文件是“unity 脚本文件”并尝试编译它们,但当 .js 文件是某种网络内容时,编译会失败。

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

可能的解决方案

1。将潜在的脚本文件放在特定文件夹中

有一些特定的文件夹,unity 不会尝试编译您的文件,例如WebPlayerTemplates.

http://docs.unity3d.com/Manual/ScriptCompileOrderFolders.html

2。重命名潜在的脚本文件

由于只会对某些文件(例如 .cs.js)执行统一编译,因此您可以通过将它们重命名为 e.g. 来避免编译。 .js_


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

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


如何做到这一点

只需创建一个自定义构建脚本(必须存储在Editor 文件夹中,例如Assets/Editor)。您将在统一中找到一个名为 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_)
    }
}

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

【讨论】:

  • 嘿 d4Rk 谢谢你的回答。然而,这并不能解决问题,因为我不想强迫任何人自定义构建以避免 js 文件的问题。据我所知,Unity 5 建议使用 .aar 文件而不是经典的 Plugins/Android/res/raw 文件夹来创建 Android 插件。根据我的理解,使用 .aar 库项目,资源被打包并且解析器不可见。我仍在努力寻找更可靠的解决方案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-05-31
  • 2021-12-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-23
  • 2019-05-31
  • 2015-05-19
相关资源
最近更新 更多