Menggunakan Unity sebagai subview memberi saya layar hitam


9

Saya menggunakan Unity dengan Android dan berfungsi saat tampilan di layar penuh, namun ketika saya membuatnya menjadi subview, layar tidak menampilkan apa pun.

masukkan deskripsi gambar di sini

Ini berfungsi sebagai layar penuh:

masukkan deskripsi gambar di sini

Intent intent = new Intent(this, UnityPlayerActivity.class);
intent.putExtra("arguments", "data from android");
startActivity(intent);

Pertanyaan-pertanyaan ini juga tidak terjawab:

Saya sudah mencoba solusi yang mereka miliki, tetapi tampaknya tidak ada yang berhasil.

Tampilkan Unity Scene sebagai Sub View di studio android

/gamedev/134347/android-black-screen-with-unity-app-in-subview

Subview layar hitam persatuan di android

MainActivity / Unity Manifest saya saat ini:

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

        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.frameLayout2);
        LayoutParams lp = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
        layout.addView(m_UnityPlayer.getView(), 0, lp);
    }
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.unity3d.player" xmlns:tools="http://schemas.android.com/tools">
  <application>
    <activity android:name="com.unity3d.player.UnityPlayerActivity" android:theme="@style/UnityThemeSelector" android:screenOrientation="landscape" android:launchMode="singleTask" android:configChanges="mcc|mnc|locale|touchscreen|keyboard|keyboardHidden|navigation|orientation|screenLayout|uiMode|screenSize|smallestScreenSize|fontScale|layoutDirection|density" android:hardwareAccelerated="false">
      <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
      </intent-filter>
      <meta-data android:name="unityplayer.UnityActivity" android:value="true" />
      <meta-data android:name="android.notch_support" android:value="true" />
    </activity>
    <meta-data android:name="unity.splash-mode" android:value="0" />
    <meta-data android:name="unity.splash-enable" android:value="True" />
    <meta-data android:name="notch.config" android:value="portrait|landscape" />
    <meta-data android:name="unity.build-id" android:value="46e01524-60a4-48fa-9d28-b231f5db3c5d" />
  </application>
  <uses-feature android:glEsVersion="0x00030000" />
  <uses-feature android:name="android.hardware.vulkan.version" android:required="false" />
  <uses-feature android:name="android.hardware.touchscreen" android:required="false" />
  <uses-feature android:name="android.hardware.touchscreen.multitouch" android:required="false" />
  <uses-feature android:name="android.hardware.touchscreen.multitouch.distinct" android:required="false" />
</manifest>

Unity-Version apa yang Anda gunakan? Unity mengerjakan ulang seluruh Integrasi Android di versi 2019.3.0. Jawaban lama tidak akan berfungsi dengan integrasi baru.
aalmigthy

Saya menggunakan 2019.3.0f6 jadi cukup baru. Ah itu masuk akal, tapi saya sudah mencari dan sepertinya tidak bisa menemukan solusi untuk ini.
DIRTY DAVE

Harap berikan kode kelas MainActivity lengkap Anda.
0xBFE1A8

1
Menurut blog unity tentang unity sebagai perpustakaan, hanya layar penuh yang didukung oleh atm.
LumbusterTick

1
Berikut tautan ke penjelasan yang menyatakan hanya layar penuh yang didukung: forum.unity.com/threads/… dan inilah yang khusus android: forum.unity.com/threads/…
HoloLady

Jawaban:


0

Anda dapat mencapainya menggunakan tata letak bingkai saja, MainActivityharus diperluas Activity, bukan UnityPlayerActivity. Tambahkan dua baris ini ke aktivitas di AndroidManifest.xml.

<meta-data android:name="unityplayer.UnityActivity" android:value="true" />
<meta-data android:name="unityplayer.ForwardNativeEventsToDalvik" android:value="false" />

Kode kerjanya adalah:

main.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="250dip"  
            android:id="@+id/fl_forUnity"  
            android:background="#ff00ff15"  
            android:layout_column="4"  
            android:layout_row="0"  
            android:layout_alignParentTop="true"  
            android:layout_centerHorizontal="true">  

        </FrameLayout>  

        <Button  
            android:layout_width="wrap_content"  
            android:layout_height="wrap_content"  
            android:text="Rotate Right"  
            android:id="@+id/bt_rotRight"  
            android:layout_column="4"  
            android:layout_row="2"  
            android:layout_alignTop="@+id/bt_stop"  
            android:layout_toRightOf="@+id/bt_stop"  
            android:layout_toEndOf="@+id/bt_stop"  
            android:layout_marginLeft="30dp" />  

        <Button  
            android:layout_width="wrap_content"  
            android:layout_height="wrap_content"  
            android:text="Rotate Left"  
            android:id="@+id/bt_rotLeft"  
            android:layout_column="9"  
            android:layout_row="2"  
            android:layout_alignTop="@+id/bt_stop"  
            android:layout_toLeftOf="@+id/bt_stop"  
            android:layout_toStartOf="@+id/bt_stop"  
            android:layout_marginRight="30dp" />  

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

    </RelativeLayout>  

UnityPlayerActivity.java

    import android.widget.FrameLayout;  
    import android.widget.Button;  

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

        //Declare a FrameLayout object  
        FrameLayout fl_forUnity;  

        //Declare the buttons  
        Button bt_rotLeft;  
        Button bt_rotRight;  
        Button bt_stop;  

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

            getWindow().setFormat(PixelFormat.RGBX_8888); // <--- This makes xperia play happy  

            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(mUnityPlayer);  
            //Set the content to main  
            setContentView(R.layout.main);  

            //Inflate the frame layout from XML  
            this.fl_forUnity = (FrameLayout)findViewById(R.id.fl_forUnity);  

            //Add the mUnityPlayer view to the FrameLayout, and set it to fill all the area available  
            this.fl_forUnity.addView(mUnityPlayer.getView(),  
                    FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.MATCH_PARENT);  

            //Initialize the buttons from the XML file  
            this.bt_rotLeft = (Button) findViewById(R.id.bt_rotLeft);  
            this.bt_rotRight = (Button) findViewById(R.id.bt_rotRight);  
            this.bt_stop = (Button) findViewById(R.id.bt_stop);  

            /*Send a brodcast a message to the 'Main Camera' game object, passing L, R according to the 
            pressed buttons.*/  
            this.bt_rotLeft.setOnClickListener(new View.OnClickListener() {  
                @Override  
                public void onClick(View v) {  
                    UnityPlayer.UnitySendMessage("Main Camera", "ReceiveRotDir", "L");  
                }  
            });  

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

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

            mUnityPlayer.requestFocus();  
        }  

Saya harap URL referensi di bawah ini dapat membantu Anda. Unity dan Android CustomLayout dan Unity dan Android sub-view

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.