Unity 和 Android 交互 環境配置篇

本篇只牽扯到簡單的交互。沒有SDK接入

使用的交互方式是AAR

1,首先先確定好包名

新建Androidstudio工程 

先選擇 新建工程的Edit 選擇修改包名

新建Unity端

比較重點注意的我會標註出來

這個標註的Script Backend 決定了再安卓端要使用的jre是什麼文件夾下的

2,新建雙端工程

中間有很多坑  都是慢慢趟出來的 當前的Unity版本是2018.4.0    新建Unity確認包名 添加Plugins文件夾再在Plugins文件夾內創建Android文件夾  Unity 端暫時告一段落

確認好包名以後繼續創建工程 Androidstudio工程

1,

2,

3,

4,

5,完成以後等待編譯 編譯完成以後接着新建module  File->New->New Module..

6,

7,

8,修改包名和Library名字

9,等待編譯完成 點擊選擇 Project  這個就是剛纔創建的labrary

10,最重要的一步  就是上面提到的Script Backend 如果是mono    倒入 Unity的jar包的時候就要選擇mono 入股是il2cpp 就選擇il2cpp下面的jar 。Unity jar 包 路徑 在 Unity安裝路徑,Editor-->Data-->PlaybackEngines-->AndroidPlayer-->Variations-->mono/il2cpp(這裏根據你的unity編譯類型來選擇)-->Release-->Classes 

把這個複製 粘貼到剛纔項目的 libs下

11,選擇AandroidStudio 的File下Project Structure 選擇剛纔新建的labrary 也就是andunitytest 再選擇Dependencies 選擇+號 選擇  Jar dependency  

選擇剛纔倒入的Unity的jar 選擇ok

Scope 選擇 什麼還是待定  因爲這個是Unity 新出的 以後導出aar以後還要刪除Libs下面的jar  英 (目前打包的時候會打包libs 和文件夾下的 jar   爲了提前不導出還要設置一步 參考下一篇博客

然後選擇ok

12,先選擇安卓模式 找到對應的library 新建一個空的界面

13,複製App下面的AndroidManifest文件的application內容到andunitytest的AndroidManifest  這時候會有很多錯誤 我們慢慢解決

鼠標右鍵選擇打開 Res

打開隨便複製 命名mipmap 然後複製到剛纔的res下 也是右鍵打開

 

 

然後添加 <meta-data android:name="unityplayer.UnityActivity" android:value="true" />  到這裏  再刪除紅色報錯行 小心別刪除>括號

14,打開剛纔新建的MainActivity

修改代碼

package com.shiyuan.unityandandroidinteractive;
import android.os.Bundle;
import com.unity3d.player.UnityPlayer;
import com.unity3d.player.UnityPlayerActivity;

public class MainActivity extends UnityPlayerActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }
    public   int UnityCAndroid(int a ,int b){
        //調用Unity中的函數 顯示安卓這邊調用成功
        //1Unity該函數所在地腳本所掛的物體  方法名  要穿的參數
        UnityPlayer.UnitySendMessage("GameRoot","AndroidCUnity","Hi~ I am Android");
        return  a+b;
    }
}

我看別人說還要註釋這個  

然後

 

運行完成以後生成的aar包

然後把aar複製到Unity工程的路徑 然後再把androidmanifest 複製出來一份 (如果要設置剛纔那個博客的 打包不出來libs文件夾 就不用刪除了)

再刪除libs下面的 jre

修改拖出來的androidmanifest

15,編寫Unity代碼


using UnityEngine;
using UnityEngine.UI;

public class NewBehaviourScript : MonoBehaviour
{
    public Text _inttext, _stringText;
    public void OnCkick()
    {
        AndroidJavaClass javaClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer");

        AndroidJavaObject ac = javaClass.GetStatic<AndroidJavaObject>("currentActivity");
        int a = ac.Call<int>("UnityCAndroid", 12, 16);
        _inttext.text = a.ToString();

    }
    public void AndroidCUnity(string a)
    {
        _stringText.text = a;
    }
}
先介紹一下u3d中調用android的一些API 
UnityPlayer是unity3d自身的一個jar包,兩端通信的關鍵, 
currentActivity是android需要的上下文,這兩個東西你可以當作是調用某些android方法需要的參數,記下就行

AndroidJavaClass ajc=new AndroidJavaClass(“com.unity3d.player.UnityPlayer”); 
AndroidJavaObject ajo=ajc.GetStatic(“currentActivity”);

jo.Call(method ,parameter );//調用實例方法 
jo.Get(method ,parameter );//獲取實例變量(非靜態) 
jo.Set(method ,parameter );//設置實例 變量(非靜態) 
jo.CallStatic(method ,parameter );//調用靜態變量(非靜態) 
jo.GetStatic (method ,parameter );//獲取靜態變量 
jo.SetStatic (method ,parameter );//設置靜態變量  

 

然後 代碼掛載canvas上 canvas名字改爲GameRoot

然後打包Apk 安裝在手機

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章