最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Unity同步/異步調用Android的方法實例

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

1 Unity如何使用Android插件

很簡單,把android的模塊,打包成aar或者jar,放到Assets/Plugin/Android即可!

2 同步方法如何調用

2.1 例子1

Android端

假設Android有一個方法

    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>即表示,調用某個類的靜態(tài)方法,且返回值是String。如果返回值要Int或者bool啥的,對應修改即可,例如CallStatic< bool >。

2.2 例子2

Android端

Android有一個方法

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

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

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 異步方法如何調用

異步的話,可以這樣:

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

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

UnityPlayer.UnitySendMessage

這個類的調用方式:

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

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

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

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

3.1 Android端

3.1.1 添加依賴

首先,要把UnityPlayer依賴進來。在哪里呢?

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

然后android gradle添加依賴:

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

當然了,你開心的話,也可以把jar改個名字。

注意,需要compileOnly而不是implementation,否則打包aar到Unity后,會把libs目錄也打包到aar,最后Unity編譯apk會失敗,因為有重復的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 做實際處理,例如請求權限
    }

	//處理完事情,通過消息告訴Unity結果
    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調用。notifyResult則是處理完事情,通過消息告訴Unity結果。

3.2 Unity端

首先是調用的方法:

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

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

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

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

總結

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

相關文章

最新評論

增城市| 阳城县| 碌曲县| 宝丰县| 广安市| 锡林郭勒盟| 隆子县| 资源县| 阳春市| 顺平县| 聂拉木县| 琼中| 蕲春县| 建宁县| 民和| 扬中市| 江西省| 台湾省| 隆子县| 通河县| 惠州市| 北海市| 沾益县| 北川| 伊吾县| 林甸县| 穆棱市| 静乐县| 广饶县| 寿阳县| 金塔县| 建德市| 舟山市| 吉水县| 渭南市| 西乡县| 肃宁县| 呼伦贝尔市| 广元市| 峨眉山市| 嘉峪关市|