- >总结:
我想从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中打印:
- “[...] D / mDEBUG:测试Android1”
- “[...] D / mDEBUG:Unity:AndroidStudio - Unity - Init”
- “[...] D / mDEBUG:测试Android2”
- >实际结果:
对于没有VR设置的应用:
- “[...] D / mDEBUG:测试Android1”
- “[...] D / mDEBUG:Unity:AndroidStudio - Unity - Init”
- “[...] D / mDEBUG:测试Android2”
适用于VR的应用:
- “[...] D / mDEBUG:测试Android1”
- “[...] D / mDEBUG:测试Android2”
也没有错误,Unity应用程序没有崩溃...它只是“似乎忽略”函数调用...
好吧,似乎我知道问题是什么,我认为它无法真正得到帮助......
我正在向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!
干杯!