->摘要:
我想发送消息从AndroidStudio -代码到统一-正常的方式似乎不起作用。
->我所尝试的:
我在Unity3D有两个项目。他们是完全一样的,除了其中一个是为Oculus齿轮Vr.然后我导出(Android)这两个项目,并将它们作为AndroidStudio项目打开。当我现在运行这些程序时,它们都完全按照预期工作!
但是当我尝试使用UnityPlayer.UnitySendMessage -方法时,该方法似乎没有在应用程序中执行,安装vor VR.这个应用程序不会崩溃,它不会显示LogCat中的任何错误,我试图捕捉任何Throwable,但这也不起作用。
(在没有虚拟现实设置的应用程序中,完全相同的代码行工作.)
->安卓-代码:
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);
}
[...]
}->统一-代码:
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打印:
->实际结果
没有为VR设置的应用程序的:
应用程序的与VR
也没有错误和统一应用程序没有崩溃..。只是“似乎忽略了”函数调用..。
发布于 2019-04-17 16:47:43
好吧,看来我知道问题出在哪里了,我觉得这真的帮不上忙.
我是在向团结组织发出这样的信息:
mUnityPlayer = new UnityPlayer(this);
setContentView(mUnityPlayer);
mUnityPlayer.requestFocus();
UnityPlayer.UnitySendMessage("AndroidCommunication", "AndroidStudioInit", "false");通常,联合会将消息存储在队列中,以便在联合正常启动后执行它。
这适用于应用程序,而没有启用Vr就可以了。
但是,启用Vr模式的将首先在设备上显示屏幕(类似于“将设备放入齿轮Vr .”)。我觉得这在某种程度上扰乱了信息的传递..。
因此,统一只会在正确启动后执行消息(在“由统一制造”窗口结束后)。
记住:如果你使用Vr,在团结完全开始之前不要发送信息.如果您仍然希望在开始时执行代码,您可以尝试在联合中构建一个方法,它将通知android代码联合已经完成!
干杯!
https://stackoverflow.com/questions/55538989
复制相似问题