Unity | Unity与Android交互流程总结

一、背景

        虽然使用Unity3D可以完成制作一款游戏的绝大部分工作,但是在研发过程中,对于一些功能,比如实现手机震动、获取手机剩余存储空间等,就需要建立Unity与Android的交互。

二、Unity与Android的交互方式

        Unity与Android的交互有两种方式:1.Unity使用jar\aar库;2.Unity导出gradle项目,在AndroidStudio中进行二次开发。

本文以实现手机震动功能为例,采取第一种方式进行Unity与Android的交互。

三、运用Android Studio导出jar包

1.新建Android Studio工程:设置项目名称为PhoneShake,设置包名为com.unity.phoneshake。

2.新建Library:注意包名还是com.unity.phoneshake。

3.引入unity的 classes.jar包:将classes.jar复制到Android Studio项目mylibrary/libs下,选中classes.jar右键→Add As Library。(classes.jar包路径为Unity安装目录下:\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\Classes\classes.jar)

4.添加手机震动权限申请:修改mylibrary下的AndroidManifest.xml。

<manifest xmlns:android="http://schemas.android.com/apk/res/android"

    package="com.unity.phoneshake" >

    <uses-permission android:name="android.permission.VIBRATE" />

    <application

        android:label="手机振动">

        <activity android:name=".MainActivity">

            <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>

5.在mylibrary下创建MainActivity类,该类继承自UnityPlayerActivity。

package com.unity.phoneshake;

import android.app.Service;

import android.os.Bundle;

import android.os.Vibrator;

import android.widget.Toast;

import com.unity3d.player.UnityPlayerActivity;

public class MainActivity extends UnityPlayerActivity {

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

    }

    public void UnityCallShake(String msg){

        Toast.makeText(getApplicationContext(),msg,Toast.LENGTH_LONG).show();

        Vibrator vibrator=(Vibrator)getApplication().getSystemService(Service.VIBRATOR_SERVICE);

        vibrator.vibrate(2000);
    }

}

6.导出jar包:选中mylibrary,"Build"→"Make Module 'mylibrary' ",将生成的aar包解压,将解压出来的classes.jar替换libs文件夹下的classes.jar(aar包路径:mylibrary\build\outputs\aar)。

四、Unity使用jar包

1.创建Unity新工程,将上一步解压出来的libs文件及AndroidManifest.xml文件导入到Unity工程Plugins/Android文件夹下。

2.创建一个Button,写入与Android交互的代码。设置包名与Android Studio工程中包名一致,打包项目即可生成apk。

using UnityEngine;

using UnityEngine.UI;

public class CallAndroid : MonoBehaviour {

    AndroidJavaObject JavaObject;

    private void Awake()
    {
        this.GetComponent<Button>().onClick.AddListener(delegate
        {
            ClickShakeBtn();
        });
    }

    void Start()
    {
        AndroidJavaClass androidJavaClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
        JavaObject = androidJavaClass.GetStatic<AndroidJavaObject>("currentActivity");
    }

    public void ClickShakeBtn()
    {
        JavaObject.Call("UnityCallShake", "来自Unity的调用");
    }

    
}

猜你喜欢

转载自blog.csdn.net/weixin_39766005/article/details/106197097