unity 和 Androidstudio 简单交互

运行环境
unity 2019.2.11f1
Androidstudio 3.5.2
Android SDK Tools:26.1.1
Android Platfom Version : API 29

  1. 新建一个安卓工程
  2. 工程新建之后右键创建一个模块,取名叫unityactivity,注意这里的包名和新建工程的包名要一致(尽量避免不必要的错误)
    在这里插入图片描述
  3. 建完应该是这样,wait是随便起的新建工程的名字,然后在unity的安装路径找到你要用的jar包,我的路径如下:D:\Unity2019.2.11f1\Editor\Data\PlaybackEngines\AndroidPlayer\Variations\mono\Release\Classes,
    找到后复制放入unityactivity模块的libs文件夹下,然后右键->Add as Library,这一步做完应该是这个样子在这里插入图片描述
  4. src/main/java/包名/文件夹下新建一个Activity,我取名叫UnityMainAcivity在这里插入图片描述
  5. 编写交互内容
package com.sound.anzhouceshi;
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 () {

        Toast.makeText(this,"unity调用android成功", Toast.LENGTH_LONG).show();

        AndroidCallUnity();
    }

    //android调用unity
    public void AndroidCallUnity () {

        //第1个参数为Unity场景中用于接收android消息的对象名称
        //第2个参数为对象上的脚本的一个成员方法名称(脚本名称不限制)
        //第3个参数为unity方法的参数
        UnityPlayer.UnitySendMessage("Text", "fromeAndroid", "安卓给你发消息了.");
    }
}
  1. main文件夹下的AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.sound.anzhouceshi">

    <!-- 这个android:label设置后,unity中ProductName就不生效了,记得改这个-->
    <application >

        <!-- 这个android:name的值必须为包名+类名-->
        <activity android:name="com.sound.anzhouceshi.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>
  1. 生成jar包或者aar包(这里建议使用jar包,我一般使用aar包,结果在这不管用,不知道为什么)
    先Build-Clean Project一下,然后Build-Make Module ‘模块名字’,等待生成完毕之后应该是这样
    在这里插入图片描述
    找到build/intermediates/packaged-classes/debug/classes.jar(有些人是release/classes.jar)能找到就行
  2. 在unity新建文件夹 Plugins/Android/bin,将上一步找到的classes.jar放进去,同时将第六步修改的AndroidManifest.xml复制到Plugins/Android和bin同一层级,放完应该是这样
    在这里插入图片描述
  3. unity视图放一个Text和一个Button,创建一个C#脚本放在Text下(懒得起名字直接默认名字了)在这里插入图片描述
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);
    }
}

注意C#脚本中的方法和Java中写的要一致

  1. 最后一步,我在这被坑了很久,也不知道是什么原因.
    打包-填写包名
    不要和安卓工程的UnityMainAcivity 模块的包名一致!!!
    不要和安卓工程的UnityMainAcivity 模块的包名一致!!!
    不要和安卓工程的UnityMainAcivity 模块的包名一致!!!
    我被这一个坑了一个下午,包名一致的话会报很多错,最后直接打包看效果就好了
发布了57 篇原创文章 · 获赞 22 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/Mediary/article/details/102975342
今日推荐