1. 程式人生 > >Unity安卓接入以及通訊(詳細教程)

Unity安卓接入以及通訊(詳細教程)

相關問題:

關螢幕再開螢幕導致重啟問題https://blog.csdn.net/SnoopyNa2Co3/article/details/86215782

Sdk接入一定涉及到安卓既接入和通訊,雖然現在很多sdk只要打一下母包就可以出n個渠道的包,不過母包還是要接入安卓

這次教程分兩部分

第一部分:unity接入安卓

首先我們先確定一下unity裡面的包名

1.在eclipse新建安卓應用工程

File->New->Android application project

然後名字和unity一一對應,注意大小寫問題

2.不建立icon,然後下一步

3.建立一個空白的activity,然後下一步

4.點完成

5.建立完成之後的專案

6.把下圖圈著的刪除掉(layout,styles.mxl,values-v11,values-v14)

7.刪除之後會出現報錯,先開啟androidmanifest,刪除報錯地方,如下圖

8.繼續開啟mainactivity.java,同樣刪除報錯地方

9.右鍵專案(Snoopy)->Properties,開啟如下圖,然後選Android->選中appcompat_v7->remove->OK,

10.右鍵專案(Snoopy)->Properties,然後選Java build Path-—》libraries-》Add external JARS

然後匯入unity對應的Classes.Jar,最後點OK完成

11.導完classes之後開啟MainActivity

把Activity改成UnityPlayerActivity

這裡要匯入import com.unity3d.player.UnityPlayerActivity;

12.最後要匯出Jar包給unity 專案右鍵-》Export-》JAR file

13.如下圖所示只勾選Src其他設定不變,然後設定匯出目錄,最後點finish就可以

14.回到unity工程建立資料夾Assets\Plugins\Android,在Android資料夾下建立libs資料夾,把上面匯出的jar包放了libs裡面(放bin資料夾也可以:Android資料夾建立bin資料夾)

15.最後把安卓工程的AndroidManifes和res資料夾放到Unity裡面的Android資料夾

16.unity接入安卓就這樣,然後打包測試一下會不會閃退之類

一般閃退都是安卓包名和unity設定的包名不一致導致的

打包安卓報錯,把buildSystem改成Internal,如下圖

第二部分:unity和安卓之間通訊

1.Unity呼叫安卓方法

        AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
        AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
        jo.Call("CallUnity");
        jo.Call("CallUnity1","abc");

關鍵程式碼

AndroidJavaObject.Call("方法名",引數(可不填))

2.Android發資料給Unity

    public void CallUnity()
    {
    	UnityPlayer.UnitySendMessage("TestGameObj", "Test1", "1");
    }
    
    public void CallUnity1(String name)
    {
    	UnityPlayer.UnitySendMessage("TestGameObj", "Test2", name);
    }

TestGameObj是場景一個gameobject的名字

Test1TestGameObj所掛指令碼上面的一個方法

1是發給unity引數

3.測試完整程式碼

unity程式碼

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

public class test : MonoBehaviour
{
    public Text text;
    public Text text2;

    // Use this for initialization
    void Start ()
    {
        AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
        AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
        jo.Call("CallUnity");
        jo.Call("CallUnity1","abc");
    }


    public void Test1(string name)
    {
        text.text = name;
    }

    public void Test2(string name)
    {
        text2.text = name;
    }
}

安卓程式碼

package com.Snoopy.AndroidTest;

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

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;

public class MainActivity extends UnityPlayerActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }
    
    public void CallUnity()
    {
    	UnityPlayer.UnitySendMessage("TestGameObj", "Test1", "1");
    }
    
    public void CallUnity1(String name)
    {
    	UnityPlayer.UnitySendMessage("TestGameObj", "Test2", name);
    }
}

測試場景,建立空Gameobject命名TestGameObj,因為上面的安卓程式碼是給這個TestGameObj發訊息所以命名這個,新增test元件,TestGameObj所掛的指令碼有Test1和Test2方法就行,把對應的ui拖上去打包安卓包測試

測試結果

教程就到這裡