一瞎饲、07、Android使用UnityPlayer.UnitySendMessage發(fā)消息給Unity

Unity發(fā)消息給安卓的方式已經(jīng)有了炼绘,詳見Unity調用安卓系列

今天的目標是安卓發(fā)送消息給unity嗅战,實際上接口很簡單。

Android向unity發(fā)送消息俺亮,有兩種方法實現(xiàn)驮捍,一、通過unity自帶的消息機制脚曾,二东且、通過注冊回調的方式。

這里先用第一種方式實現(xiàn)本讥。

為了測試方便珊泳。
總體思路:
(1)做一個jar包。
(2)Unity調用jar包的某個方法拷沸。
(3)jar包自己調用自己的方法發(fā)送消息給untiy色查。

從頭到尾做一遍

新建一個empty activity撞芍,然后在這個工程基礎上新建一個Libray Module秧了,這里取名SendJar。
然后給這個SendJar添加一個Java類勤庐,取名SendMsgActivity示惊。


image.png
  • 2好港、將Unity提供安卓調用的classes.jar復制到SendJar的libs里。
    Unity的jar包路徑:C:\Program Files\Unity\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\il2cpp\Release\Classes
image.png

右鍵classes.jar選擇Take as Libray米罚。
打開SendJar模塊的build.gradle查看是否成功钧汹,已成功添加了依賴。

image.png
  • 3录择、SendMsgActivity主體代碼拔莱。SendMsgActivity繼承自UnityPlayerActivity。
    CallAndrodiActivity:Unity調用安卓的接口隘竭。
    SendMsg塘秦,安卓發(fā)送消息給Unity的接口,第一個參數(shù)Main Camera是Unity里接收消息對象的名字动看,第二個參數(shù)是該物體身上腳本具體接收消息的方法名尊剔,第三個參數(shù)是發(fā)送字符串消息。
package com.lgy.sendjar;

import android.os.Bundle;

import com.unity3d.player.UnityPlayer;
import com.unity3d.player.UnityPlayerActivity;

public class SendMsgActivity  extends  UnityPlayerActivity{

    @Override
    protected void onCreate(Bundle bundle) {
        super.onCreate(bundle);
    }

    public void CallAndrodiActivity()
    {
        System.out.println("===>收到了Unity的調用");
        SendMsg();
    }

    public void SendMsg()
    {
        //注釋1
        UnityPlayer.UnitySendMessage("Main Camera","messgae","這是安卓主動發(fā)來的消息");
    }

}
  • 4菱皆、修改SendMsg模塊的build.gradle
    在 build.gradle 末尾添加以下代碼须误,表示添加了一個 Task 任務
//task to delete the old jar
task deleteOldJar(type: Delete) {
    delete 'release/AndroidPlugin.jar'
}

//task to export contents as jar
task exportJar(type: Copy) {
    from('build/intermediates/arr_main_jar/release/')
    into('build/release/')
    include('classes.jar')
    ///Rename the jar
    rename('classes.jar', 'AndroidPlugin.jar')
}
exportJar.dependsOn(deleteOldJar, build)

右上角點擊該模塊的Other,展開找到exportJar仇轻,雙擊生成jar京痢。


image.png

注意:這里生成jar包的路徑,每個Android Studio的版本篷店,會有所不同的祭椰。
我這里是4.0.1的是這個路徑,直接去這個路徑找就classes.jar就好了疲陕,并不會按照上面寫的將jar包重命名并剪貼到release目錄方淤。這個是Android Studio本身的問題。

我的生成路徑是:D:\MyProject\6_Test\SendMsgJar\SendJar\build\intermediates\aar_main_jar\release

  • 5蹄殃、導入到Unity
    將拿到的 jar 放到 unity 工程的 Asset/Plugins/Android/ 目錄下臣淤。沒有的話就手動創(chuàng)建目錄。同時在這個新加一個 AndroidManifest.xml文件窃爷。
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
  <uses-permission android:name="android.permission.VIBRATE"></uses-permission>
  <application android:icon="@drawable/app_icon" android:label="@string/app_name">
    <activity android:name="com.lgy.sendjar.SendMsgActivity"
          android:label="@string/app_name"
          android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen">
      <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
      </intent-filter>
    </activity>
  </application>
</manifest>

注意:根據(jù)自己的實際情況替換這里com.lgy.sendjar.SendMsgActivity。
其中
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
的意思是將這個繼承自UnityPlayerActivity的SendMsgActivity姓蜂,作為主Activity按厘,SendMsgActivity里的功能是作為主Activity就有效。比如說是SendMsgActivity不是繼承自UnityPlayerActivity钱慢,而是繼承自XXActivity逮京,那么就需要在切換到XXActivity后,SendMsgActivity里的功能才有效束莫。
所以一般插件的做法:
1懒棉、unity插件通常不會將自己的Activity注冊為主Activity草描,因為他們把自己注冊為主Activity后,一使用他們的功能策严,那么Unity本身這個Activity就被轉到后臺了穗慕,現(xiàn)象就是你玩著玩著游戲,突然游戲轉到后臺了妻导,跳到了插件的這個Activity上逛绵,顯然不是想要的結果。
2倔韭、unity 的 android 插件開發(fā)术浪,只有一個入口,也就是繼承 UnityPlayerActivity 或者 UnityNativePlayerActivity 寿酌。
3胰苏、將他們的 Activity 標簽復制粘貼到你的 AndroidManifest.xml中,就可以調用了醇疼。比如:

        <activity
            android:name=".TestActivity0"
            android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
            >
        </activity>
 
        <activity
            android:name=".TestActivity1"
            android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
            >
        </activity>

總之硕并,所有的目的就是為了一直保留Unity本身這個Activity作為主Activity。

  • 6僵腺、unity工程調用代碼
public class Test : MonoBehaviour
{
    void Start()
    {
        AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
        AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
        jo.Call("CallAndrodiActivity");
    }

    public void messgae(string str)
    {
        Debug.Log(str);
    }

}
  • 7鲤孵、打包apk到真機運行調試,查看結果辰如。
    繼承了UnityPlayerActivity后在安卓這個工程是運行不了的普监,除非拿到Unity中集成后在真機下才能看到效果。
    可以看到Unity收到了安卓發(fā)過來的消息:“這是安卓主動發(fā)來的消息”
image.png

安卓發(fā)消息給Unity琉兜,到此結束凯正。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市豌蟋,隨后出現(xiàn)的幾起案子廊散,更是在濱河造成了極大的恐慌,老刑警劉巖梧疲,帶你破解...
    沈念sama閱讀 212,884評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件允睹,死亡現(xiàn)場離奇詭異,居然都是意外死亡幌氮,警方通過查閱死者的電腦和手機缭受,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,755評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來该互,“玉大人米者,你說我怎么就攤上這事。” “怎么了蔓搞?”我有些...
    開封第一講書人閱讀 158,369評論 0 348
  • 文/不壞的土叔 我叫張陵胰丁,是天一觀的道長。 經(jīng)常有香客問我喂分,道長锦庸,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,799評論 1 285
  • 正文 為了忘掉前任妻顶,我火速辦了婚禮酸员,結果婚禮上,老公的妹妹穿的比我還像新娘讳嘱。我一直安慰自己幔嗦,他們只是感情好,可當我...
    茶點故事閱讀 65,910評論 6 386
  • 文/花漫 我一把揭開白布沥潭。 她就那樣靜靜地躺著邀泉,像睡著了一般。 火紅的嫁衣襯著肌膚如雪钝鸽。 梳的紋絲不亂的頭發(fā)上汇恤,一...
    開封第一講書人閱讀 50,096評論 1 291
  • 那天,我揣著相機與錄音拔恰,去河邊找鬼因谎。 笑死,一個胖子當著我的面吹牛颜懊,可吹牛的內容都是我干的财岔。 我是一名探鬼主播,決...
    沈念sama閱讀 39,159評論 3 411
  • 文/蒼蘭香墨 我猛地睜開眼河爹,長吁一口氣:“原來是場噩夢啊……” “哼匠璧!你這毒婦竟也來了?” 一聲冷哼從身側響起咸这,我...
    開封第一講書人閱讀 37,917評論 0 268
  • 序言:老撾萬榮一對情侶失蹤夷恍,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后媳维,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體酿雪,經(jīng)...
    沈念sama閱讀 44,360評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,673評論 2 327
  • 正文 我和宋清朗相戀三年侄刽,在試婚紗的時候發(fā)現(xiàn)自己被綠了执虹。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,814評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡唠梨,死狀恐怖,靈堂內的尸體忽然破棺而出侥啤,到底是詐尸還是另有隱情当叭,我是刑警寧澤茬故,帶...
    沈念sama閱讀 34,509評論 4 334
  • 正文 年R本政府宣布,位于F島的核電站蚁鳖,受9級特大地震影響磺芭,放射性物質發(fā)生泄漏。R本人自食惡果不足惜醉箕,卻給世界環(huán)境...
    茶點故事閱讀 40,156評論 3 317
  • 文/蒙蒙 一钾腺、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧讥裤,春花似錦放棒、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至损肛,卻和暖如春厢破,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背治拿。 一陣腳步聲響...
    開封第一講書人閱讀 32,123評論 1 267
  • 我被黑心中介騙來泰國打工摩泪, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人劫谅。 一個月前我還...
    沈念sama閱讀 46,641評論 2 362
  • 正文 我出身青樓见坑,卻偏偏與公主長得像同波,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子戴尸,可洞房花燭夜當晚...
    茶點故事閱讀 43,728評論 2 351