У меня есть действие с подпредставлением, которое загружает в него UnityPlayer.Этот UnityPlayer работает хорошо и как ожидалось.Затем я открываю новый фрагмент в этом действии, этот фрагмент также имеет представление, которое загружает в него UnityPlayer.Этот UnityPlayer также работает хорошо и как ожидалось.
Проблема возникает, когда я выхожу из фрагмента, возвращаясь к действию.Здесь UnityPlayer заморожен, и программа в конечном итоге вылетает.Кто-нибудь есть идеи (или указатели) о том, как использовать UnityPlayer в различных представлениях, как это?
Например:
Когда открывается действие, я использую это для инициализации моего представления:
public void init(Context context) {
inflate(context, R.layout.exercise_3d_animation_layout, this);
mUnityPlayer = new UnityPlayer(context);
FrameLayout frameLayout = findViewById(R.id.unity_player);
frameLayout.addView(mUnityPlayer);
mUnityPlayer.setOnTouchListener(this);
}
Тогда в моей деятельности есть все обычные обратные вызовы Unity-Android:
// Quit Unity
@Override protected void onDestroy ()
{
mUnityPlayer.quit();
super.onDestroy();
}
// Pause Unity
@Override protected void onPause()
{
super.onPause();
mUnityPlayer.pause();
}
// Resume Unity
@Override protected void onResume()
{
super.onResume();
mUnityPlayer.resume();
}
@Override protected void onStart()
{
super.onStart();
mUnityPlayer.start();
}
@Override protected void onStop()
{
super.onStop();
mUnityPlayer.stop();
}
// Low Memory Unity
@Override public void onLowMemory()
{
super.onLowMemory();
mUnityPlayer.lowMemory();
}
// Trim Memory Unity
@Override public void onTrimMemory(int level)
{
super.onTrimMemory(level);
if (level == TRIM_MEMORY_RUNNING_CRITICAL)
{
mUnityPlayer.lowMemory();
}
}
// This ensures the layout will be correct.
@Override public void onConfigurationChanged(Configuration newConfig)
{
super.onConfigurationChanged(newConfig);
mUnityPlayer.configurationChanged(newConfig);
}
// Notify Unity of the focus change.
@Override public void onWindowFocusChanged(boolean hasFocus)
{
super.onWindowFocusChanged(hasFocus);
mUnityPlayer.windowFocusChanged(hasFocus);
}
// For some reason the multiple keyevent type is not supported by the ndk.
// Force event injection by overriding dispatchKeyEvent().
@Override public boolean dispatchKeyEvent(KeyEvent event)
{
if (event.getAction() == KeyEvent.ACTION_MULTIPLE)
return mUnityPlayer.injectEvent(event);
return super.dispatchKeyEvent(event);
}
// Pass any events not handled by (unfocused) views straight to UnityPlayer
@Override public boolean onKeyUp(int keyCode, KeyEvent event) { return mUnityPlayer.injectEvent(event); }
@Override public boolean onKeyDown(int keyCode, KeyEvent event) { return mUnityPlayer.injectEvent(event); }
@Override public boolean onTouchEvent(MotionEvent event) { return mUnityPlayer.injectEvent(event); }
/*API12*/ public boolean onGenericMotionEvent(MotionEvent event) { return mUnityPlayer.injectEvent(event); }
И когда фрагмент открывается, он снова инициализирует представление (как и раньше).Я думаю, что моя проблема в понимании жизненного цикла обоих и как они взаимодействуют