1
\$\begingroup\$

I've exported an Unity app/game I have made to Android Studio. In Android Studio I made a layout and within it I have a framelayout. However, when I run the app the framelayout is completely black, why?

Here is my Java code:

public class UnityPlayerActivity extends Activity {
    protected UnityPlayer mUnityPlayer; // don't change the name of this variable; referenced from native code

    FrameLayout fl_forUnity;

    Button bt_groen, bt_gul, bt_sort;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        super.onCreate(savedInstanceState);

        getWindow().setFormat(PixelFormat.RGBX_8888); 

        mUnityPlayer = new UnityPlayer(this);
        if (mUnityPlayer.getSettings().getBoolean("hide_status_bar", true)) {
            setTheme(android.R.style.Theme_NoTitleBar_Fullscreen);
            getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                    WindowManager.LayoutParams.FLAG_FULLSCREEN);
        }


        setContentView(R.layout.main);


        this.fl_forUnity = (FrameLayout) findViewById(R.id.fl_forUnity);

        this.fl_forUnity.addView(mUnityPlayer.getView(),
                FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT);


        this.bt_groen = (Button) findViewById(R.id.bt_groen);
        this.bt_gul = (Button) findViewById(R.id.bt_gul);
        this.bt_sort = (Button) findViewById(R.id.bt_sort);

        this.bt_groen.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                UnityPlayer.UnitySendMessage("Main Camera", "ReceiveRotDir", "G");
            }
        });

        this.bt_gul.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                UnityPlayer.UnitySendMessage("Main Camera", "ReceiveRotDir", "Y");
            }
        });

        this.bt_sort.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                UnityPlayer.UnitySendMessage("Main Camera", "ReceiveRotDir", "B");
            }
        });

        mUnityPlayer.requestFocus();
    }
}

Here is my XML:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                android:layout_width="match_parent" android:layout_height="match_parent"
                android:rowCount="3"
                android:columnCount="10">

    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="400dip"
        android:id="@+id/fl_forUnity"
        android:background="#00FFFF"
        android:layout_centerHorizontal="true">

    </FrameLayout>

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Grøn"
        android:id="@+id/bt_groen"
        android:layout_column="4"
        android:layout_row="2"
        android:layout_alignTop="@+id/bt_sort"
        android:layout_toRightOf="@+id/bt_sort"
        android:layout_toEndOf="@+id/bt_sort"
        android:layout_marginLeft="30dp" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Gul"
        android:id="@+id/bt_gul"
        android:layout_column="9"
        android:layout_row="2"
        android:layout_alignTop="@+id/bt_sort"
        android:layout_toLeftOf="@+id/bt_sort"
        android:layout_toStartOf="@+id/bt_sort"
        android:layout_marginRight="30dp" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Sort"
        android:id="@+id/bt_sort"
        android:layout_below="@+id/fl_forUnity"
        android:layout_centerHorizontal="true"
        android:layout_margin="10dip" />

</RelativeLayout>
\$\endgroup\$
  • \$\begingroup\$ I had a similar issue a little while back. Have you preloaded any assets in your player settings? For me preloading assets is what caused the problem \$\endgroup\$ – hobnob Dec 13 '16 at 16:58
  • \$\begingroup\$ What do you mean by preloaded? \$\endgroup\$ – user4118143 Dec 13 '16 at 16:58
  • \$\begingroup\$ In your player settings there's an option to preload assets, which I found caused my game to throw a black screen on Android. If you haven't found it then you're probably not using it though TBH. The manual page is here if you're interested :-) docs.unity3d.com/Manual/class-PlayerSettingsAndroid.html \$\endgroup\$ – hobnob Dec 13 '16 at 17:04
  • \$\begingroup\$ Ok.... What could then be the problem? \$\endgroup\$ – user4118143 Dec 13 '16 at 17:23
-1
\$\begingroup\$

I found the answer: add android:process=":UnityKillsMe" to your unity library activity tag in manifest.

And also, we should implement onWindowfocusChangedListener for sure:

void OnWindowFocusChanged(){ m_UnityPlayer.windowFocusChanged(hasFocus);}

My code: It worked

public class MainActivity extends AppCompatActivity {

   private UnityPlayer m_UnityPlayer;

   @Override
   protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       // Create the UnityPlayer
       m_UnityPlayer = new UnityPlayer(this);
       int glesMode = m_UnityPlayer.getSettings().getInt("gles_mode", 1);
       boolean trueColor8888 = false;
       m_UnityPlayer.init(glesMode, trueColor8888);

       setContentView(R.layout.activity_main);

       FrameLayout layout = (FrameLayout) findViewById(R.id.frameLayout);
       LayoutParams lp = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
       layout.addView(m_UnityPlayer.getView(), 0, lp);
       m_UnityPlayer.windowFocusChanged(true);
       m_UnityPlayer.resume();
   }
   @Override
   public void onWindowFocusChanged(boolean hasFocus)
   {
       super.onWindowFocusChanged(hasFocus);
       m_UnityPlayer.windowFocusChanged(hasFocus);
   }
   @Override
   public void onPause() {
       super.onPause();
       m_UnityPlayer.pause();
   }
   @Override
   public void onResume() {
       super.onResume();
       m_UnityPlayer.resume();
   }

   @Override
   protected void onDestroy() {
       super.onDestroy();
       m_UnityPlayer.quit();
   }
}
| improve this answer | |
\$\endgroup\$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.