如何让Android应用程序保持运行并退出Unity Activity

时间:2016-04-19 12:27:48

标签: android unity3d android-lifecycle

我正在开发一个与Unity3d集成的应用程序,在我的代码的某些部分,我称之为启动Unity3d代码的UnityPlayerActivity。当用户完成使用Unity3d时,他按下一个按钮并返回Android代码。 我的问题是在UnityPlayerActivity调用之后我回到android代码:

@Override protected void onDestroy ()
{
    mUnityPlayer.quit();
    super.onDestroy();
}

应用程序已关闭,而不仅仅是Unity活动。我不能称这种方法,但我认为这会浪费记忆力。

有什么方法可以让我只退出Unity3d活动并保持我的应用程序正常运行,这样我可以再次启动Unity3d部分吗?

韩国社交协会

3 个答案:

答案 0 :(得分:3)

找到答案。只需要在清单上使用另一个进程。

http://answers.unity3d.com/questions/587979/how-do-i-stop-munityplayerquit-closing-the-entire.html

韩国社交协会,

答案 1 :(得分:0)

您也可以使用反射,因此避免调用kill()方法(在quit()中调用),这会杀死当前进程

   try {
        //1
        Field v = unityPlayer.getClass().getDeclaredField("v");
        v.setAccessible(true);
        Method a = v.getType().getMethod("a");
        a.invoke(v.get(unityPlayer));

        //2
        Field o = unityPlayer.getClass().getDeclaredField("o");
        o.setAccessible(true);
        o.set(unityPlayer, true);

        //3
        unityPlayer.pause();
        Method unloadVR = unityPlayer.getClass().getDeclaredMethod("unloadGoogleVR");
        unloadVR.setAccessible(true);
        unloadVR.invoke(unityPlayer);

        //4
        unityPlayer.removeAllViews();

        //5
        Method h = unityPlayer.getClass().getDeclaredMethod("h");
        h.setAccessible(true);
        h.invoke(unityPlayer);
    } catch (Exception e) {
        e.printStackTrace();
    }

答案 2 :(得分:0)

1.重置UnityPlayer类的kill()方法

类MyUnityPlayer扩展了UnityPlayer {

return self[self.index(self.startIndex, offsetBy: randomIndex)]
在mUnityPlayer.quit()中调用

kill(),它将终止当前进程:

    public MyUnityPlayer(Context context) {
        super(context);
    }

    @Override
    protected void kill() {

    }
}

所以重写它以避免进程被杀死。

2.在UnityPlayerActivity中将mUnityPlayer的类型更改为MyUnityPlayer

当您要退出活动时,

3.call finish()方法的UnityPlayerActivity。 (就我而言,在从UnityPlayerActivity开始一项新活动后,在完成UnityPlayerActivity后,App崩溃了。)