- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
-> 总结:
我想从 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:
- "[...] D/mDEBUG: Test Android1"
- "[...] D/mDEBUG: Unity: AndroidStudio - Unity - Init"
- "[...] D/mDEBUG: Test Android2"
->实际结果:
For app without setup for VR:
- "[...] D/mDEBUG: Test Android1"
- "[...] D/mDEBUG: Unity: AndroidStudio - Unity - Init"
- "[...] D/mDEBUG: Test Android2"
For app with VR:
- "[...] D/mDEBUG: Test Android1"
- "[...] 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/
我是一名优秀的程序员,十分优秀!