使用版本:
Unity:2018.2.10f
AS:3.5
最近由於需要接公司原生的java SDK,所以打算用U3D調用sdk、然後監聽sdk回調的方法,麻煩的地方在於sdk部分需要在AS中去做。查找了不少帖子,終於找到了以這篇博客。
1,
根據博客中的方法,首先新建一個安卓工程:
2,工程新建之後右鍵創建一個模塊,取名叫unityactivity,注意這裏的包名和新建工程的包名要一致(儘量避免不必要的錯誤,當然具體原因我還不太清楚)
3,然後打開U3D安裝目錄,找到Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\Classes下的classes.jar,找到後複製放入unityactivity模塊的libs文件夾下,然後右鍵->Add as Library
這裏選默認的就行了,也就是導入到unityactivity文件夾下,導入之後截圖如下(classes.jar前面有效小三角,代表導入成功):
4,在AS中編寫交互腳本,一個是U3D調用AS,然後AS給U3D回調。如果是接SDK的話,即U3D調用SDK的消息,然後等SDK收到回調方法後,再把消息通知給U3D。代碼如下:
package com.yadong.unityactivity;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.Toast;
import com.unity3d.player.UnityPlayer;
import com.unity3d.player.UnityPlayerActivity;
public class UnityMainAcivity extends UnityPlayerActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
//unity調用Android
public void UnityCallAndroid () {
AndroidCallUnity();
}
//android調用unity
public void AndroidCallUnity () {
//第1個參數爲Unity場景中用於接收android消息的對象名稱
//第2個參數爲對象上的腳本的一個成員方法名稱(腳本名稱不限制)
//第3個參數爲unity方法的參數
UnityPlayer.UnitySendMessage("Text", "fromeAndroid", "安卓給你發消息了.");
Toast.makeText(this,"android給U3D返回消息", Toast.LENGTH_LONG).show();
}
}
5,修改AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.yadong.unityactivity">
<!-- 這個android:label設置後,unity中ProductName就不生效了,記得改這個-->
<application >
<!-- 這個android:name的值必須爲包名+類名-->
<activity android:name="com.yadong.unityactivity.UnityMainAcivity">
<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>
</application>
</manifest>
6,先Build-Clean Project一下,然後Build-Make Module ‘模塊名字’,生成jar包,結果如下:
7,在unity新建文件夾 Plugins/Android/bin,將上一步找到的classes.jar放進去,同時將第六步修改的AndroidManifest.xml複製到Plugins/Android和bin同一層級,放完後:
8,接下來我們處理U3D的部分,新建一個測試的腳本
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class NewBehaviourScript : MonoBehaviour
{
public Text text;
public Button btn;
AndroidJavaObject jo;
private void Start()
{
AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
btn.onClick.AddListener(CallAndroid);
}
public void CallAndroid()
{
jo.Call("UnityCallAndroid");
Debug.Log("點擊按鈕");
System.Console.WriteLine("點擊按鈕");
}
void methodName111(string str)
{
text.text = str;
Debug.Log(str);
System.Console.WriteLine(str);
}
void fromeAndroid(string str)
{
text.text = str;
Debug.Log("安卓傳來信息 : " + str);
System.Console.WriteLine("安卓傳來信息 : " + str);
}
}
9,然後建個Text,將腳本拖上去;再建個button,監聽點擊回調
10,打包成apk,這裏要注意apk的包名不能與安卓的包名一致
最終測試結果:
測試工程我已經上傳到下載資源中,地址爲:https://download.csdn.net/download/Tel17610887670/12584600