首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我如何发送信息从安卓到团结(与虚拟现实)?(UnityPlayer.UnitySendMessage不起作用)

我如何发送信息从安卓到团结(与虚拟现实)?(UnityPlayer.UnitySendMessage不起作用)
EN

Stack Overflow用户
提问于 2019-04-05 15:37:16
回答 1查看 2.1K关注 0票数 3

->摘要:

我想发送消息从AndroidStudio -代码到统一-正常的方式似乎不起作用。

->我所尝试的:

我在Unity3D有两个项目。他们是完全一样的,除了其中一个是为Oculus齿轮Vr.然后我导出(Android)这两个项目,并将它们作为AndroidStudio项目打开。当我现在运行这些程序时,它们都完全按照预期工作!

但是当我尝试使用UnityPlayer.UnitySendMessage -方法时,该方法似乎没有在应用程序中执行,安装vor VR.这个应用程序不会崩溃,它不会显示LogCat中的任何错误,我试图捕捉任何Throwable,但这也不起作用。

(在没有虚拟现实设置的应用程序中,完全相同的代码行工作.)

->安卓-代码:

代码语言:javascript
复制
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);
   }

   [...]
}

->统一-代码:

代码语言:javascript
复制
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:统一: AndroidStudio - Unity”
  3. “. D/mDEBUG:测试Android2”

->实际结果

没有为VR设置的应用程序的

  1. “. D/mDEBUG:测试Android1”
  2. “. D/mDEBUG:统一: AndroidStudio - Unity”
  3. “. D/mDEBUG:测试Android2”

应用程序的与VR

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

也没有错误和统一应用程序没有崩溃..。只是“似乎忽略了”函数调用..。

EN

回答 1

Stack Overflow用户

发布于 2019-04-17 16:47:43

好吧,看来我知道问题出在哪里了,我觉得这真的帮不上忙.

我是在向团结组织发出这样的信息:

代码语言:javascript
复制
mUnityPlayer = new UnityPlayer(this);
setContentView(mUnityPlayer);
mUnityPlayer.requestFocus();

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

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

这适用于应用程序,而没有启用Vr就可以了。

但是,启用Vr模式的将首先在设备上显示屏幕(类似于“将设备放入齿轮Vr .”)。我觉得这在某种程度上扰乱了信息的传递..。

因此,统一只会在正确启动后执行消息(在“由统一制造”窗口结束后)。

记住:如果你使用Vr,在团结完全开始之前不要发送信息.如果您仍然希望在开始时执行代码,您可以尝试在联合中构建一个方法,它将通知android代码联合已经完成!

干杯!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55538989

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档