如何从Android发送消息到Unity(使用VR)? (UnityPlayer.UnitySendMessage不起作用)

问题描述 投票:2回答:1

- >总结:

我想从Android Studio发送消息 - 代码到Unity - 正常方式似乎不起作用。


- >我尝试了什么:

我在Unity3D中有两个项目。它们是完全相同的,除了其中一个是为Oculus Gear Vr设置的......然后我导出(Android)这两个项目并将它们打开为AndroidStudio项目。当我运行这些时,两者都完全按预期工作!

但是,当我尝试使用UnityPlayer.UnitySendMessage - 方法时,该方法似乎不会在应用程序中使用setup vor VR执行...应用程序没有崩溃,它没有显示LogCat中的任何错误,我试图抓住任何Throwable但那也没有用......

(在没有VR设置的应用程序上,完全相同的代码行工作......)


- > Android - 代码:

public class UnityPlayerActivity extends Activity {
   [...]

   onCreate(Bundle savedInstanceState){
      [...] //code generated by Unity

      try{
         Log.d("mDEBUG", "Test Android1");
         UnityPlayer.UnitySendMessage("AndroidCommunication", "AndroidStudioInit", "false");
         Log.d("mDEBUG", "Test Android2");
      }catch(Throwable e){
         e.printStackTrace();
      }
   }

   //Function used by Unity - Code
   public void unityLog(String msg){
      Log.d("mDEBUG", "Unity: " + msg);
   }

   [...]
}

- > Unity - 代码:

public void AndroidStudioInit(string flag)
{
   bool sendCurCameraRotation = bool.Parse(flag);

   AndroidJavaClass unityPlayerClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
   AndroidJavaObject unityPlayerActivity = unityPlayerClass.GetStatic<AndroidJavaObject>("currentActivity");

   unityPlayerActivity.Call("unityLog", "AndroidStudio - Unity - Init");
}


- >预期产出:

对于这两个应用程序,它应该在Logcat中打印:

  1. “[...] D / mDEBUG:测试Android1”
  2. “[...] D / mDEBUG:Unity:AndroidStudio - Unity - Init”
  3. “[...] D / mDEBUG:测试Android2”

- >实际结果:

对于没有VR设置的应用:

  1. “[...] D / mDEBUG:测试Android1”
  2. “[...] D / mDEBUG:Unity:AndroidStudio - Unity - Init”
  3. “[...] D / mDEBUG:测试Android2”

适用于VR的应用:

  1. “[...] D / mDEBUG:测试Android1”
  2. “[...] D / mDEBUG:测试Android2”

也没有错误,Unity应用程序没有崩溃...它只是“似乎忽略”函数调用...

android unity3d integration virtual-reality oculus
1个回答
0
投票

好吧,似乎我知道问题是什么,我认为它无法真正得到帮助......

我正在向Unity发送一条消息:

mUnityPlayer = new UnityPlayer(this);
setContentView(mUnityPlayer);
mUnityPlayer.requestFocus();

UnityPlayer.UnitySendMessage("AndroidCommunication", "AndroidStudioInit", "false");

通常Unity会将消息存储在队列中,以便在Unity正确启动后执行它。

这适用于没有Vr启用的应用程序。

但是在启用Vr模式的情况下,屏幕将首先显示在您的设备上(例如“将您的设备放入Gear Vr ......”)。我认为它以某种方式弄乱了发送消息......

所以Unity只会在正确启动后执行消息(在“由Unity制造”窗口之后)。

要记住:如果您使用Vr,请不要发送消息直到Unity完全启动...如果您仍想在启动时执行代码,您可以尝试在Unity中构建一个方法,通知Android代码已完成Unity!

干杯!

© www.soinside.com 2019 - 2024. All rights reserved.