Unity 和 Android 交互 环境配置篇

本篇只牵扯到简单的交互。没有SDK接入

使用的交互方式是AAR

1,首先先确定好包名

新建Androidstudio工程 

先选择 新建工程的Edit 选择修改包名

新建Unity端

比较重点注意的我会标注出来

这个标注的Script Backend 决定了再安卓端要使用的jre是什么文件夹下的

2,新建双端工程

中间有很多坑  都是慢慢趟出来的 当前的Unity版本是2018.4.0    新建Unity确认包名 添加Plugins文件夹再在Plugins文件夹内创建Android文件夹  Unity 端暂时告一段落

确认好包名以后继续创建工程 Androidstudio工程

1,

2,

3,

4,

5,完成以后等待编译 编译完成以后接着新建module  File->New->New Module..

6,

7,

8,修改包名和Library名字

9,等待编译完成 点击选择 Project  这个就是刚才创建的labrary

10,最重要的一步  就是上面提到的Script Backend 如果是mono    倒入 Unity的jar包的时候就要选择mono 入股是il2cpp 就选择il2cpp下面的jar 。Unity jar 包 路径 在 Unity安装路径,Editor-->Data-->PlaybackEngines-->AndroidPlayer-->Variations-->mono/il2cpp(这里根据你的unity编译类型来选择)-->Release-->Classes 

把这个复制 粘贴到刚才项目的 libs下

11,选择AandroidStudio 的File下Project Structure 选择刚才新建的labrary 也就是andunitytest 再选择Dependencies 选择+号 选择  Jar dependency  

选择刚才倒入的Unity的jar 选择ok

Scope 选择 什么还是待定  因为这个是Unity 新出的 以后导出aar以后还要删除Libs下面的jar  英 (目前打包的时候会打包libs 和文件夹下的 jar   为了提前不导出还要设置一步 参考下一篇博客

然后选择ok

12,先选择安卓模式 找到对应的library 新建一个空的界面

13,复制App下面的AndroidManifest文件的application内容到andunitytest的AndroidManifest  这时候会有很多错误 我们慢慢解决

鼠标右键选择打开 Res

打开随便复制 命名mipmap 然后复制到刚才的res下 也是右键打开

然后添加 <meta-data android:name="unityplayer.UnityActivity" android:value="true" />  到这里  再删除红色报错行 小心别删除>括号

14,打开刚才新建的MainActivity

修改代码

package com.shiyuan.unityandandroidinteractive;
import android.os.Bundle;
import com.unity3d.player.UnityPlayer;
import com.unity3d.player.UnityPlayerActivity;

public class MainActivity extends UnityPlayerActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }
    public   int UnityCAndroid(int a ,int b){
        //调用Unity中的函数 显示安卓这边调用成功
        //1Unity该函数所在地脚本所挂的物体  方法名  要穿的参数
        UnityPlayer.UnitySendMessage("GameRoot","AndroidCUnity","Hi~ I am Android");
        return  a+b;
    }
}

我看别人说还要注释这个  

然后

运行完成以后生成的aar包

然后把aar复制到Unity工程的路径 然后再把androidmanifest 复制出来一份 (如果要设置刚才那个博客的 打包不出来libs文件夹 就不用删除了)

再删除libs下面的 jre

修改拖出来的androidmanifest

15,编写Unity代码


using UnityEngine;
using UnityEngine.UI;

public class NewBehaviourScript : MonoBehaviour
{
    public Text _inttext, _stringText;
    public void OnCkick()
    {
        AndroidJavaClass javaClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer");

        AndroidJavaObject ac = javaClass.GetStatic<AndroidJavaObject>("currentActivity");
        int a = ac.Call<int>("UnityCAndroid", 12, 16);
        _inttext.text = a.ToString();

    }
    public void AndroidCUnity(string a)
    {
        _stringText.text = a;
    }
}
先介绍一下u3d中调用android的一些API 
UnityPlayer是unity3d自身的一个jar包,两端通信的关键, 
currentActivity是android需要的上下文,这两个东西你可以当作是调用某些android方法需要的参数,记下就行

AndroidJavaClass ajc=new AndroidJavaClass(“com.unity3d.player.UnityPlayer”); 
AndroidJavaObject ajo=ajc.GetStatic(“currentActivity”);

jo.Call(method ,parameter );//调用实例方法 
jo.Get(method ,parameter );//获取实例变量(非静态) 
jo.Set(method ,parameter );//设置实例 变量(非静态) 
jo.CallStatic(method ,parameter );//调用静态变量(非静态) 
jo.GetStatic (method ,parameter );//获取静态变量 
jo.SetStatic (method ,parameter );//设置静态变量  

然后 代码挂载canvas上 canvas名字改为GameRoot

然后打包Apk 安装在手机

猜你喜欢

转载自blog.csdn.net/qq_36848370/article/details/103051647