하위 뷰로 Unity를 사용하면 검은 화면이 나타납니다.


9

Android에서 Unity를 사용하고 있으며 뷰가 전체 화면 일 때 작동하지만 하위 뷰로 만들면 화면에 아무것도 표시되지 않습니다.

여기에 이미지 설명을 입력하십시오

전체 화면으로 작동합니다.

여기에 이미지 설명을 입력하십시오

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

이 질문들에도 답이 없습니다 :

나는 그들이 가지고있는 해결책을 시도했지만 아무도 효과가없는 것 같습니다.

안드로이드 스튜디오에서 Unity View를 Sub View로 표시

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

안드로이드의 블랙 스크린 유니티 서브 뷰

나의 현재 MainActivity / Unity Manifest :

@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 버전을 사용하고 있습니까? Unity는 2019.3.0 버전에서 전체 Android 통합을 재 작업했습니다. 이전 답변은 새 통합에서 작동하지 않습니다.
aalmigthy

2019.3.0f6을 사용하고있어 매우 새롭습니다. 아, 이해가 되긴하지만 검색을 해왔고 이에 대한 해결책을 찾지 못하는 것 같습니다.
더티 데이브

전체 MainActivity 클래스 코드를 제공하십시오.
21:40에 0xBFE1A8

1
unity on a unity on a library에 따르면 전체 화면 만 atm이 지원됩니다.
LumbusterTick

1
다음은 전체 화면 만 지원한다는 설명에 대한 링크입니다 : forum.unity.com/threads/… 그리고 여기에는 특정 안드로이드가 있습니다 : forum.unity.com/threads/…
14:52의 HoloLady

답변:


0

프레임 레이아웃 만 사용하여 얻을 수 MainActivity있으며로 확장해서는 Activity안됩니다 UnityPlayerActivity. 활동에이 두 줄을 추가하십시오 AndroidManifest.xml.

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

작동 코드는 다음과 같습니다

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();  
        }  

아래 참조 URL이 도움이 되길 바랍니다. Unity 및 Android CustomLayoutUnity 및 Android 하위보기

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.