android - 升级到 Unity 5 后 res/raw 中的 Android 库插件 .js 文件出现问题

标签 android unity3d assets

我正在为一个库使用 Android Unity 插件,它遵循之前的 Unity 5 建议结构,并且运行良好。该软件包将必要的文件放在 Assets/Plugins/Android 下,jar 文件所在的位置以及文件夹 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(至少尝试)编译您的所有脚本。此时 unity 期望 .js 文件是“unity script files”并尝试编译它们,然后失败,当 .js 文件是某种网页内容。

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

可能的解决方案

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

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

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

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

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


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

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


如何实现

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

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

关于android - 升级到 Unity 5 后 res/raw 中的 Android 库插件 .js 文件出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29474516/

相关文章:

java - 如何从源代码编译 Android 运行时 (ART)

Android 处理程序、计时器和多线程

php - 需要有关将图像保存到 mySQL 的指导

unity3d - Time.frameCount什么时候增加?

c# - 从主摄像头射击弹丸时左右瞄准

android - 通过命令行签署 APK

java - 如何通过其uid获取Firestore用户列表?

android - 如何在android上获取 Assets 文件夹中的文件属性?

android - 如何在Android studio中导入字体

heroku - Heroku Cedar 的生产中未定义 Gmaps