gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 06:28:54 26 4
gpt4 key购买 nike

-> 总结:

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


->我试过的:

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

但是当我尝试使用 UnityPlayer.UnitySendMessage - 方法时,该方法似乎无法在具有 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");
}


-> 预期输出:

For both apps it should print in Logcat:

  1. "[...] D/mDEBUG: Test Android1"
  2. "[...] D/mDEBUG: Unity: AndroidStudio - Unity - Init"
  3. "[...] D/mDEBUG: Test Android2"

->实际结果:

For app without setup for VR:

  1. "[...] D/mDEBUG: Test Android1"
  2. "[...] D/mDEBUG: Unity: AndroidStudio - Unity - Init"
  3. "[...] D/mDEBUG: Test Android2"

For app with VR:

  1. "[...] D/mDEBUG: Test Android1"
  2. "[...] D/mDEBUG: Test Android2"

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

最佳答案

好吧,看来我知道问题出在哪里,我认为这真的没有帮助......

我正在像这样向 Unity 发送消息:

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

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

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

这适用于未启用 Vr 的应用程序。

但是启用 Vr 模式后,屏幕将首先显示在您的设备上(类似于“将您的设备放入 Gear Vr ...”)。而且我认为它以某种方式扰乱了消息发送...

因此 Unity 只会在正常启动后执行消息(在窗口“Made by Unity”过去之后)。

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

干杯!

关于android - 如何将消息从 Android 发送到 Unity(使用 VR)? (UnityPlayer.UnitySendMessage 不起作用),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55538989/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com