天天看點

Unity3D與Android的互動通信(Unity3D)

  大家好,我是佛系工程師☆恬靜的小魔龍☆,不定時更新Unity開發技巧。

一、前言

這篇文章主要講的是如何使用Android Studio與Unity的互動通信。主要内容有如何在Android Studio建立工程,如何設定,以及如何導出。以及在Unity調用Android的方法。

二、參考資料

  1. Unity與Android通信 https://blog.csdn.net/qq_33747722/article/details/53390198
  2. Unity和Android互相通信 https://blog.csdn.net/qq_15267341/article/details/51961665
  3. [Unity][安卓]Unity和Android Studio 3.0 互動通訊(1)Android Studio 3.0 設定 https://blog.csdn.net/bulademian/article/details/78387461

三、目錄

  • 建立Android項目
  • 建立Android模闆Module
  • 導入加載jar檔案
  • 修改AndroidMainfest.xml檔案
  • 修改MainActivity檔案
  • 編譯建構項目
  • 導入Unity
  • Unity調用Android項目方法

四、正文

1、建立Android項目

Fiele->New->New Project

Unity3D與Android的互動通信(Unity3D)
Unity3D與Android的互動通信(Unity3D)
Unity3D與Android的互動通信(Unity3D)
Unity3D與Android的互動通信(Unity3D)

點選 FINISH 按鈕,建立工程。

Unity3D與Android的互動通信(Unity3D)

2、建立Android模闆Module

右鍵項目 New->Module

Unity3D與Android的互動通信(Unity3D)

選擇Android Library

Unity3D與Android的互動通信(Unity3D)

這個地方可以設定子產品的名字

Unity3D與Android的互動通信(Unity3D)

點選Finsh就可以了

Unity3D與Android的互動通信(Unity3D)

如果不小心寫錯子產品名字了,想删除了,就右鍵 Open Module Settings

Unity3D與Android的互動通信(Unity3D)

删除就行了

Unity3D與Android的互動通信(Unity3D)

3、導入加載外部jar檔案

這個有三種加載外部jar檔案的方法,這邊隻采用第一種,剩餘方法可以參考我另一篇文章。 【Android Studio】導入外部jar包【https://blog.csdn.net/q764424567/article/details/85231151】 切換到Project視圖

Unity3D與Android的互動通信(Unity3D)

找到libs檔案夾

Unity3D與Android的互動通信(Unity3D)

将你自己要使用的jar包拖進去(複制粘貼也行)

Unity3D與Android的互動通信(Unity3D)
Unity3D與Android的互動通信(Unity3D)
Unity3D與Android的互動通信(Unity3D)

右擊Jar檔案,點選Add As Library後,在出現的彈出框點選确定即可

Unity3D與Android的互動通信(Unity3D)

添加成功 導入成功的jar包

Unity3D與Android的互動通信(Unity3D)

打開build.gradle檔案,可以看到最後一行添加成功的代碼

Unity3D與Android的互動通信(Unity3D)
Unity3D與Android的互動通信(Unity3D)

4、将Unity的classes.jar加載到項目中去

classes.jar這個檔案,直接可以在Unity的安裝目錄中搜尋,找到之後複制粘貼到項目的libs檔案中

Unity3D與Android的互動通信(Unity3D)
Unity3D與Android的互動通信(Unity3D)
Unity3D與Android的互動通信(Unity3D)
Unity3D與Android的互動通信(Unity3D)

OK了

Unity3D與Android的互動通信(Unity3D)

5、 建立MainActivity

切換到Android視圖,然後展開unity_exchange->java->右鍵第一個檔案夾

Unity3D與Android的互動通信(Unity3D)
Unity3D與Android的互動通信(Unity3D)

不做任何 處理,點選 FINISH 按鈕後。

就建立了MainActivity ,右邊是初始腳本。

Unity3D與Android的互動通信(Unity3D)

6、修改AndroidMainfest.xml檔案

1.先把unity_exchange下面res檔案夾中的layout下面的activity_main_xml删除

Unity3D與Android的互動通信(Unity3D)

如果有報錯

Unity3D與Android的互動通信(Unity3D)

就把MainActivity.java腳本中的

Unity3D與Android的互動通信(Unity3D)

這一行注釋掉

2.修改unity_exchange目錄下的mainfests檔案中的AndroidManifest.xml

打開app目錄下的manifests檔案夾中的AndroidManifest.xml

Unity3D與Android的互動通信(Unity3D)

複制這一段代碼

Unity3D與Android的互動通信(Unity3D)

粘貼到unity_exchange->manifest->AndroidManifest.xml

Unity3D與Android的互動通信(Unity3D)

7、修改MainActivity檔案

Unity3D與Android的互動通信(Unity3D)
Unity3D與Android的互動通信(Unity3D)

這個時候,如下所示。

Unity3D與Android的互動通信(Unity3D)

改為如下所示。

Unity3D與Android的互動通信(Unity3D)

下面就是在Android中編寫Unity要調用的方法了,例如我這裡隻寫一個簡單的兩數求和的方法:

Unity3D與Android的互動通信(Unity3D)
Unity3D與Android的互動通信(Unity3D)

8、編譯建構項

1.編譯 選中 unity_exchange 點選build -- Make Module 'unityexchange'

Unity3D與Android的互動通信(Unity3D)

等待一下,就會顯示如下所示。如果沒有,就重新試幾次。

Unity3D與Android的互動通信(Unity3D)

使用 Build -- Make Project 或者 Build -- Rebuild Project 重新編譯工程。 切換到Project視圖,可以看到build檔案中有一個packaged-classes檔案夾,不同版本的Android Stuido可能檔案夾名字不一樣,百度一下就知道了

Unity3D與Android的互動通信(Unity3D)

右鍵show in explorer,打開檔案夾到目前目錄

Unity3D與Android的互動通信(Unity3D)

2.把classes.jar移動到libs檔案夾中

Unity3D與Android的互動通信(Unity3D)

3.将AndroidManifest.xml和res檔案夾,複制到這個檔案夾中 AndroidManifest.xml在

Unity3D與Android的互動通信(Unity3D)
Unity3D與Android的互動通信(Unity3D)
Unity3D與Android的互動通信(Unity3D)

9、導入Unity

建立Unity工程 在工程目錄建立Plugins->Android 然後将上圖中的3個檔案複制過來

Unity3D與Android的互動通信(Unity3D)

10、Unity調用Android項目方法

1.建立test1.cs挂載在Main Camera上面

Unity3D與Android的互動通信(Unity3D)

2.編寫代碼

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class test1 : MonoBehaviour
{
    private Transform cantrans;//Canvas
    private Text text;//text
    private Button button;//按鈕
    private AndroidJavaObject jo = null;
    private InputField input1;
    private InputField input2;
    
    void Start()
    {
        //固定寫法
        AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
        jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
        cantrans = GameObject.Find("Canvas").transform;
        text = cantrans.Find("Text").GetComponent<Text>();
        button = cantrans.Find("Button").GetComponent<Button>();
        input1 = cantrans.Find("InputField").GetComponent<InputField>();
        input2 = cantrans.Find("InputField2").GetComponent<InputField>();
        button.onClick.AddListener(OnClick);
    }

    //按鈕方法
    public void OnClick()
    {
        text.text = "";
        int res = jo.Call<int>("Add", int.Parse(input1.text), int.Parse(input2.text));
        text.text = res.ToString();
    }
}           

複制

3.制作UI

Unity3D與Android的互動通信(Unity3D)

4.打包釋出

複制AndroidManifest.xml中這一行代碼

Unity3D與Android的互動通信(Unity3D)

粘貼到這裡

Unity3D與Android的互動通信(Unity3D)

釋出,運作