2015-09-18 70 views
1

我剛開始學習Unity,因此這可能看起來像一個愚蠢的問題。Android Unity - 更改啓動器活動

我做了一個小型迷你遊戲,當設備相機看到特定圖像時呈現角色。我的問題是,我想在聯合活動觸發前顯示某種菜單。 例如在我的代碼中,我將我的啓動器活動更改爲我的主要活動,當按下啓動按鈕時,我希望觸發統一活動(並且設備相機將打開)。不幸的是,它不起作用(當我按下按鈕時,我的應用程序崩潰),我的logcat不顯示任何東西。

這是我的清單

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="imp.diana.samurai" 
    android:installLocation="preferExternal" 
    android:theme="@android:style/Theme.NoTitleBar" 
    android:versionCode="1" 
    android:versionName="1.0" > 

    <uses-sdk 
     android:minSdkVersion="16" 
     android:targetSdkVersion="23" /> 

    <uses-feature android:name="android.hardware.camera" /> 

    <supports-screens 
     android:anyDensity="true" 
     android:largeScreens="true" 
     android:normalScreens="true" 
     android:smallScreens="true" 
     android:xlargeScreens="true" /> 

    <uses-permission android:name="android.permission.INTERNET" /> 
    <uses-permission android:name="android.permission.CAMERA" /> 
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

    <uses-feature android:glEsVersion="0x00020000" /> 
    <uses-feature 
     android:name="android.hardware.camera.autofocus" 
     android:required="false" /> 
    <uses-feature 
     android:name="android.hardware.camera.front" 
     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" /> 

    <android:uses-permission android:name="android.permission.READ_PHONE_STATE" /> 

    <application 
     android:debuggable="false" 
     android:icon="@drawable/app_icon" 
     android:isGame="true" 
     android:label="@string/app_name" 
     android:theme="@android:style/Theme.NoTitleBar.Fullscreen" > 
     <activity 
      android:name=".UnityPlayerNativeActivity" 
      android:configChanges="mcc|mnc|locale|touchscreen|keyboard|keyboardHidden|navigation|orientation|screenLayout|uiMode|screenSize|smallestScreenSize|fontScale" 
      android:label="@string/app_name" 
      android:launchMode="singleTask" 
      android:screenOrientation="fullSensor" > 

      <meta-data 
       android:name="unityplayer.UnityActivity" 
       android:value="true" /> 
      <meta-data 
       android:name="unityplayer.ForwardNativeEventsToDalvik" 
       android:value="false" /> 
     </activity> 
     <activity 
      android:name="com.unity3d.player.VideoPlayer" 
      android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen" 
      android:label="@string/app_name" 
      android:screenOrientation="portrait" > 
     </activity> 
     <!-- 
      To support devices using the TI S3D library for stereo mode we must 
      add the following library. 
      Devices that require this are: ODG X6 
     --> 
     <uses-library 
      android:name="com.ti.s3d" 
      android:required="false" /> 
<!--    To support the ODG R7 in stereo mode we must add the following library. --> 
     <uses-library 
      android:name="com.osterhoutgroup.api.ext" 
      android:required="false" /> 

     <activity 
      android:name=".MainActivity" 
      android:label="@string/title_activity_main"> 

      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 

     </activity> 
    </application> 

</manifest> <!-- android:installLocation="preferExternal" --> 

主要活動

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     Button start = (Button) findViewById(R.id.button); 
     start.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       startActivity(new Intent(MainActivity.this, UnityPlayer.class)); 
      } 
     }); 
    } 

UnityPlayerActivity

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

    // 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)) 
     { 
      getWindow().setFlags (WindowManager.LayoutParams.FLAG_FULLSCREEN, 
            WindowManager.LayoutParams.FLAG_FULLSCREEN); 
     } 

     setContentView(mUnityPlayer); 
     mUnityPlayer.requestFocus(); 
    } 

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

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

任何想法?任何幫助將不勝感激!

回答

2

您可能沒有在AndroidManifest.xml文件中使用標記<activity></activity>列出UnityPlayerActivity,例如<activity></activity>

<activity 
    android:name=".UnityPlayerActivity" 
    android:label="@string/app_name" 
    ... 
    > 
</activity> 
+0

非常感謝!這解決了我的問題:D – Diana