【问题标题】:Call scene in Unity from Android plugin从 Android 插件调用 Unity 中的场景
【发布时间】:2016-04-24 12:17:17
【问题描述】:

我有一个通过应用链接从另一个 Android 应用程序调用的 Unity 应用程序。因此,我为 Unity 创建了 Android 插件来处理通过 url 发送到应用程序的参数。根据来自 url 的数据,我想加载 Unity 应用程序中定义的三个场景之一。我试图从场景 2 中调用游戏对象,但出现错误:找不到对象并且已加载场景 0。

这是 Android 插件对 Unity 的调用:

UnityPlayer.UnitySendMessage("ARCamera", "startScene", "some data");

看起来 Unity 正在寻找场景 no0 中的 ARCamera,但它当然不存在。 是否可以调用构建设置中未定义为开始(0)的场景?怎么样?

编辑:

在安卓中:

public void startAppP() {
        Log.v(TAG, "starting p");
        UnityPlayer.UnitySendMessage("ARCameraP", "loadScene", "sceneP");
    }

在 Unity(场景定义为 no3)中附加在名为 ARCameraP 的对象上的脚本中:

public void loadScene(string sceneName)
{
    UnityEngine.Debug.Log("HI");
    Application.LoadLevel(sceneName);
}

它不断返回 SendMessage: object ARCameraP not found!

我正在使用旧版本的 Unity,因为我在使用 Vuforia 时遇到了一些问题。在我将 Unity 降级到 5.1.2 版本之前,相机一直显示黑屏。

【问题讨论】:

    标签: java android vuforia unity3d


    【解决方案1】:

    您可以通过将 0 传递给 SceneManager.LoadScene(0); 来加载默认场景,但您不能使用方法 SceneManager.LoadScene("defaultScene"); 的字符串重载版本,直到您添加构建设置中的场景。

    C#代码:

    public void loadScene(string sceneName)
    {
        SceneManager.LoadScene(sceneName);
    }
    

    Java 代码:

    UnityPlayer.UnitySendMessage("NameOfGameObject", "loadScene", "sceneName");
    

    确保将场景名称添加到构建设置中。如果不是,请使用SceneManager.LoadScene(0);

    【讨论】:

    • 是的,我正在做类似的事情......我发送场景的名称并根据名称加载我需要的 Application.LoadLevel("nameofscene")。但问题是 Scene0 总是显示大约一秒钟,然后是 Scene2 或 Scene1(取决于应该开始的内容),我不希望这样。它看起来像闪屏。我想直接从java代码告诉加载哪个场景。并且,所有内容都添加到构建设置中
    • @midnightcoffee Application.LoadLevel("nameofscene") 已弃用。 SceneManager.LoadScene 替换了它。我的答案中的代码将直接从 Java 端加载场景。创建一个名为“NameOfGameObject”的游戏对象,将脚本附加到它。在该脚本中,将 loadScene 函数放入脚本中。也可以使用我发布的 Java 代码从 Java 调用它。那应该行得通。如果没有,请发布您的 Java 和 C# 代码以获得更多帮助。
    • 它不断返回 SendMessage: object ARCameraP not found!但是对象在场景中并被这样调用
    猜你喜欢
    • 1970-01-01
    • 2016-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-04
    • 2019-03-12
    • 1970-01-01
    相关资源
    最近更新 更多