本篇只牽扯到簡單的交互。沒有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 安裝在手機