Android调用Unity,关闭Unity场景的一些问题

本文介绍了解决Unity场景嵌入Android APP后返回问题的方法。一种方案是在Unity中调用Application.Quit(),并在AndroidManifest.xml中设置特定属性以创建新进程。但此方法可能导致返回时出现长时间黑屏。
AI助手已提取文章相关产品:

最近在搞在Android的APP中嵌入一个Uni't'y场景,然而关闭unity场景是遇到了问题,调用Unity的Application.Quit();并没有返回上一个Adroid的界面,而是直接关闭了APP或者APP进入了后台运行,上网找到了相关问题的一些解决方案,下面总结一下。

 

下面这一篇博客讲的很详细,测试以后,确实解决了返回的问题,会正常返回上一个Android界面,但是遇到了新的问题,返回时,黑屏时间很长,Android Studio 虚拟机 需要三秒左右,难以接受,相关问题的小伙伴可以自己测试下,说不定对你有帮助

https://blog.youkuaiyun.com/airgreen/article/details/72834682

 

 

接下里描述另一种方式

如果是Unity中点击某一个按钮推出,在Unity中按钮的点击事件依旧调用Application.Quit();

    public void Quit()
    {
        Application.Quit();
    }

然后就是AndroidStudio中的操作

修改AndroidManifest.xml文件

 <activity android:name=".MainActivity"  android:process=":UnityActivity"  
  </activity>

核心是下面这一句

android:process=":UnityActivity", 生成一个新的进程(详细描述可以自行搜索了解)

这个方法可以解决我目前遇到的问题,不过生成一个新的进程会带来什么其他的影响,还没显示出来,有待观察

 

 

 

 

 

 

您可能感兴趣的与本文相关内容

Android应用中调用Unity组件或功能,通常需要通过Unity导出为Android库(如 `.jar` 或 `.aar` 文件),然后在Android项目中通过特定的接口与Unity进行通信。以下是实现AndroidUnity交互的主要方法和步骤。 ### Unity导出为AndroidUnity可以通过勾选 **Export Project** 选项,导出为一个标准的Android工程,这样Android Studio可以直接对其进行构建和集成。另一种常见方式是将Unity项目打包为 `.jar` 或 `.aar` 文件,供Android项目直接引用。在Unity导出为库文件后,可以将 `classes.jar` 文件(位于Unity安装目录或导出的Android项目中)复制到Android项目的 `app/libs/` 目录中,并在 `build.gradle` 文件中添加依赖: ```gradle implementation files('libs\\classes.jar') ``` ### Android调用Unity方法 Android可以通过 `UnityPlayer.UnitySendMessage` 方法向Unity发送消息。此方法允许从Android调用Unity场景中的具体方法。例如,定义一个静态方法 `SendMsgToUnity`: ```java private static final String connecterName = "Canvas"; // Unity中的对象名称 public static void SendMsgToUnity(String methodName, String args) { UnityPlayer.UnitySendMessage(connecterName, methodName, args); } ``` 其中,`connecterName` 是Unity场景中的一个GameObject名称,`methodName` 是该GameObject上某个脚本中定义的方法名,`args` 是传递给该方法的参数。 ### Unity调用Android方法 Unity端可以通过JNI(Java Native Interface)调用Android原生方法。在Unity中使用C#编写脚本时,可以通过 `AndroidJavaObject` 和 `AndroidJavaClass` 来访问Android的Java类和方法。例如,调用Android的Toast提示: ```csharp using UnityEngine; public class AndroidBridge : MonoBehaviour { void ShowToast(string message) { AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); AndroidJavaObject context = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity"); AndroidJavaClass toastClass = new AndroidJavaClass("android.widget.Toast"); context.Call<AndroidJavaObject>("runOnUiThread", new AndroidJavaRunnable(() => { AndroidJavaObject toast = toastClass.CallStatic<AndroidJavaObject>("makeText", context, message, 0); toast.Call("show"); })); } } ``` ### UnityAndroid生命周期的协调 在处理UnityAndroid交互时,需要注意生命周期的协调。例如,当用户按下返回键时,建议调用 `Activity.finish()` 而不是直接调用 `UnityPlayer.quit()`,因为 `UnityPlayerActivity.onDestroy()` 方法中已经包含了退出Unity的逻辑 [^3]。 ### UnityAndroid的通信方式总结 1. **Unity导出为Android库(Jar/AAR)**:通过将Unity导出为 `.jar` 或 `.aar` 文件,Android可以直接引用这些库并进行交互。 2. **Android调用Unity方法**:使用 `UnityPlayer.UnitySendMessage` 向Unity发送消息。 3. **Unity调用Android方法**:使用JNI和Java反射机制调用Android端的方法。 4. **协调生命周期**:合理处理UnityAndroid的生命周期,避免不必要的崩溃或资源泄漏。 通过上述方法,可以实现AndroidUnity之间的双向通信,从而在Android应用中嵌入Unity的3D功能或游戏内容。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值