欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Unity同步/異步調(diào)用Android的方法實(shí)例

 更新時(shí)間:2021年08月29日 14:59:04   作者:長江很多號(hào)  
unity在Android端開發(fā)的時(shí)候,免不了要調(diào)用Java,下面這篇文章主要給大家介紹了關(guān)于Unity同步/異步調(diào)用Android的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下

1 Unity如何使用Android插件

很簡單,把a(bǔ)ndroid的模塊,打包成aar或者jar,放到Assets/Plugin/Android即可!

2 同步方法如何調(diào)用

2.1 例子1

Android端

假設(shè)Android有一個(gè)方法

    public static String GetVideoParams() {
        MediaMetadataRetriever retriever = new MediaMetadataRetriever();
        retriever.setDataSource(LOCAL_VIDEO_PATH);
        String width = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_WIDTH); //寬
        String height = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_VIDEO_HEIGHT); //高
        Log.w(TAG, "GetVideoParams, width " + width + " height " + height);
        return width +"_" + height;
    }

Unity端

則Unity的C#腳本,可以這么寫:

AndroidJavaObject androidVideoPlugin = new AndroidJavaObject("com.iqiyi.cutgreenvideosdk.VideoPlugin");
String width_height = androidVideoPlugin.CallStatic<String>("GetVideoParams");

其中com.iqiyi.cutgreenvideosdk.VideoPlugin是Android方法的包名和類名。
CallStatic<String>即表示,調(diào)用某個(gè)類的靜態(tài)方法,且返回值是String。如果返回值要Int或者bool啥的,對(duì)應(yīng)修改即可,例如CallStatic< bool >。

2.2 例子2

Android端

Android有一個(gè)方法

public void start(Context context, int externalTextureId) {
....
}

這個(gè)不是靜態(tài)的方法了,但需要傳遞context對(duì)象。

Unity端

AndroidJavaObject androidVideoPlugin = new AndroidJavaObject("com.iqiyi.cutgreenvideosdk.VideoPlugin");
//get activity
 AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
            AndroidJavaObject activity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity");
            
 androidVideoPlugin.Call("start", activity, 1);

Call后面是android端的方法名,以及參數(shù)。

3 異步方法如何調(diào)用

異步的話,可以這樣:

Unity發(fā)起調(diào)用,Android處理調(diào)用,并通過消息,通知給Unity。

具體而言。首先,Java是有辦法向C#發(fā)消息的:

UnityPlayer.UnitySendMessage

這個(gè)類的調(diào)用方式:

UnityPlayer.UnitySendMessage(“GameObjectName”, “MethodName”, “parameter to send”);

第一個(gè)參數(shù),是Unity的對(duì)象名字,注意,不是腳本名字喔!??!

第二個(gè)參數(shù),是掛載在Unity對(duì)象的某個(gè)腳本的方法名稱

第三個(gè)參數(shù),是方法的參數(shù)。

3.1 Android端

3.1.1 添加依賴

首先,要把UnityPlayer依賴進(jìn)來。在哪里呢?

在你的Unity安裝目錄下,Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\Classes
里面有個(gè)classes.jar,拿出來,放到Android工程,具體模塊的libs目錄下。

然后android gradle添加依賴:

dependencies {
    compileOnly files('libs/classes.jar')
}

當(dāng)然了,你開心的話,也可以把jar改個(gè)名字。

注意,需要compileOnly而不是implementation,否則打包aar到Unity后,會(huì)把libs目錄也打包到aar,最后Unity編譯apk會(huì)失敗,因?yàn)橛兄貜?fù)的classes.jar。

3.1.2 代碼邏輯

    private static String mGameObject = "";
    private static String mCallbackFunction = "";

    public static void checkPermission(Context context, String gameObject, String callbackFunction) {
        Log.i(TAG, "checkPermission gameObject " + gameObject + " callbackFunction " + callbackFunction);
        mGameObject = gameObject;
        mCallbackFunction = callbackFunction;
        //TODO 做實(shí)際處理,例如請(qǐng)求權(quán)限
    }

	//處理完事情,通過消息告訴Unity結(jié)果
    private static void notifyResult(boolean permissionGranted) {
        try {
            //參數(shù)1, 腳本掛載的gameObject名稱,參數(shù)2, 腳本方法,參數(shù)3,返回值
            Log.w(TAG, "notifyResult, permissionGranted " + permissionGranted + " mGameObject " + mGameObject + " mCallbackFunction " + mCallbackFunction);
            UnityPlayer.UnitySendMessage(mGameObject, mCallbackFunction, permissionGranted ? "1" : "0");
            getInstance().mContext = null;
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

上面的checkPermission由Unity調(diào)用。notifyResult則是處理完事情,通過消息告訴Unity結(jié)果。

3.2 Unity端

首先是調(diào)用的方法:

    private void checkPermission()
    {
        Debug.Log(TAG + "checkPermission");
        AndroidJavaObject nativeObject = new AndroidJavaObject("com.iqiyi.cutgreenvideosdk.PermissionHelper");
        nativeObject.CallStatic("checkPermission", activity, "AndroidVideoScreen", "onPermissionResult");//AndroiwdVideoScreen 為腳本掛載的對(duì)象,onPermissionResult為腳本監(jiān)聽回調(diào)的函數(shù)名稱 
    }

這里,把腳本所掛載的對(duì)象名字,即AndroidVideoScreen,傳遞給了Android。以及把腳本處理的回調(diào)函數(shù)名稱onPermissionResult,也告訴Android。

接著,就是實(shí)現(xiàn)onPermissionResult, 等著接收回調(diào)了:

    public void onPermissionResult(String resultCode)
    {
       //TODO
    }

總結(jié)

到此這篇關(guān)于Unity同步/異步調(diào)用Android的文章就介紹到這了,更多相關(guān)Unity同步異步調(diào)用Android內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論