生活随笔
收集整理的這篇文章主要介紹了
unity与Android交互的currentActivity和入口Activity
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
一.Android導(dǎo)出jar或aar包到Unity
當(dāng)在Android Studio開發(fā)時(shí),將unity的jar包導(dǎo)入后,可自定義一個(gè)類繼承自com.unity3d.player.UnityPlayerActivity
import com
. unity3d
. player
. UnityPlayerActivity
; public class MainActivity extends UnityPlayerActivity { @Override protected void onCreate ( Bundle savedInstanceState
) { super . onCreate ( savedInstanceState
) ; } }
而UnityPlayerActivity代碼如下:
public class UnityPlayerActivity extends Activity { protected UnityPlayer mUnityPlayer
; public UnityPlayerActivity ( ) { } protected void onCreate ( Bundle var1
) { this . requestWindowFeature ( 1 ) ; super . onCreate ( var1
) ; this . mUnityPlayer
= new UnityPlayer ( this ) ; this . setContentView ( this . mUnityPlayer
) ; this . mUnityPlayer
. requestFocus ( ) ; } . . .
}
因?yàn)樽宇悇?chuàng)建時(shí)不會(huì)創(chuàng)建父類對(duì)象,所以這個(gè)this是子類對(duì)象的引用。
public UnityPlayer ( Context var1
) { super ( var1
) ; if ( var1
instanceof Activity ) { currentActivity
= ( Activity
) var1
; this . c
= currentActivity
. getRequestedOrientation ( ) ; } . . .
}
此時(shí)的currentActivity就是MainActivity對(duì)象的引用
所以在Unity中獲取的currentActivity就是MainActivity,代碼如下:
AndroidJavaClass javaClass3
= new AndroidJavaClass ( "com.unity3d.player.UnityPlayer" ) ;
AndroidJavaObject javaObject
= javaClass
. GetStatic < AndroidJavaObject > ( "currentActivity" ) ;
在Android中同樣可以獲取currentActivity
public static Activity
GetActivity ( )
{ Activity activity
= null
; try { Class
< ? > classtype
= Class
. forName ( "com.unity3d.player.UnityPlayer" ) ; activity
= ( Activity
) classtype
. getDeclaredField ( "currentActivity" ) . get ( classtype
) ; } catch ( Exception e
) { } return activity
;
}
此時(shí)AndroidManifest.xml中的入口Activity 此時(shí)Activity的name可以為:
name = “包名.MainActivity” 或 name = “.MainActivity” (與上面表示的相同) 另: 當(dāng)改為name = “com.unity3d.player.UnityPlayerActivity” 也運(yùn)行正常
< activity android
: name
= "包名.MainActivity" > < intent
- filter
> < action android
: name
= "android.intent.action.MAIN" / > < category android
: name
= "android.intent.category.LAUNCHER" / > < / intent
- filter
> < meta
- dataandroid
: name
= "unityplayer.UnityActivity" android
: value
= "true" / >
< / activity
>
二.Unity導(dǎo)出project到Android進(jìn)行二次開發(fā)
Andrioid平臺(tái)Gradle模式 勾選Export Project 該操作會(huì)自動(dòng)生成一個(gè) 包名.UnityPlayerActivity,其路徑為: xxx\src\main\java\com\xxx\xxx\UnityPlayerActivity.java 代碼如下:
package com
. xxx
. xxx
;
public class UnityPlayerActivity extends Activity
{ protected UnityPlayer mUnityPlayer
; @Override protected void onCreate ( Bundle savedInstanceState
) { requestWindowFeature ( Window
. FEATURE_NO_TITLE
) ; super . onCreate ( savedInstanceState
) ; mUnityPlayer
= new UnityPlayer ( this ) ; setContentView ( mUnityPlayer
) ; mUnityPlayer
. requestFocus ( ) ; } . . .
}
若原本Android/plugins下沒有AndroidMainfest.xml,則使用的是默認(rèn)的AndroidMainfest.xml,且入口Activity默認(rèn)為:
name=“com.unity3d.player.UnityPlayerActivity”
< activity android
: name
= "com.unity3d.player.UnityPlayerActivity" android
: label
= "@string/app_name" > < 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" / >
< / activity
>
導(dǎo)出project生成的AndroidMainfest.xml中:
name=“包名.UnityPlayerActivity”
總結(jié)
以上是生活随笔 為你收集整理的unity与Android交互的currentActivity和入口Activity 的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔 網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔 推薦給好友。