欢迎加入Unity业内qq交流群:956187480
qq扫描二维码加群
b站有别人的视频教程:https://www.bilibili.com/video/av13882682
完整源码demo地址:https://download.csdn.net/download/qq_37310110/10438314
参考博客地址:https://blog.csdn.net/qq_37310110/article/details/80455663
老早就想着写一篇关于unity与安卓交互的博客记录了,一直也没有时间刚好最近项目与安卓原生的交互很频繁。就想着顺带记录一下我的安卓交互血泪史。网上 的参考博客很多很多五花八门,琳琅满目,其实都挺不错的但是呢在实际开发过程中会遇到各种各样的 你想不到的坑,而这些坑只能自己一个人默默的去填平。以下也是本博主参考网络及几何自身项目的记录。
开始:
一:下载安装最新版本AndroidStudio,部署安卓端
或许有的人会说习惯用Eclipse ,此处不做争论理论两个编辑器都是可以的,只不过一个打出的是jar包,一个打出的是arr包,具体arr包跟jar包的区别大家有兴趣可以深入一下,arr是比jar包更高一级的里面内容更多一些。其实最重要的一点现在androidStudio是大趋势 。
1.新建工程
123内容随便填不做特殊要求,4的话会自动生成这个名字感觉上应该跟unity的包名一致,没做测试,为了免去不必要麻烦就设置一样。
此界面不做设置默认即可,有特殊需求的做相应设置
注意此处有大坑(本人所遇到的),一下的1.2默认是都勾选的意思应该是默认安卓的一套显示布局巴拉巴拉。本人在这里把这两个勾选给取消掉了,不要勾选切记。这个小步骤影响你后面的步骤的繁琐程度。
2.引用unity的classjar
classes.jar的路径是不一样的,我在此贴出我的路径。大家参考
把此jar拖拽到libs,再从libs拖拽到unity目录,娘的走过去是移动,走回来就是复制粘贴了,真是厉害。
选中工程根目录右键 打开 OpenModuleSetting
好到此引用jar成功,预编译一下。
3.敲代码安卓端的java代码,我是安卓小白代码全靠粘贴
打开MainActivity类,这个类名是在新建工程的时候可以设置的
package com.romantic.forunity;
import android.app.AlertDialog;
import android.os.Vibrator;
import android.os.Bundle;
import android.widget.Toast;
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 String ShowDialog(final String _title, final String _content){
runOnUiThread(new Runnable() {
@Override
public void run() {
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
builder.setTitle(_title).setMessage(_content).setPositiveButton("Down", null);
builder.show();
}
});
return "Java return";
}
// 定义一个显示Toast的方法,在Unity中调用此方法
public void ShowToast(final String mStr2Show){
// 同样需要在UI线程下执行
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(getApplicationContext(),mStr2Show, Toast.LENGTH_LONG).show();
}
});
}
// 第一个参数是unity中的对象名字,记住是对象名字,不是脚本类名
// 第二个参数是函数名
// 第三个参数是传给函数的参数,目前只看到一个参数,并且是string的,自己传进去转吧
public void callUnityFunc(String _objName , String _funcStr, String _content)
{
UnityPlayer.UnitySendMessage(_objName, _funcStr, "Come from:" + _content);
}
}
4.为unity的成功调用做一下改动
1)在主 activity 结点下添加信息,否则在 Unity 导出 APK 时会报找不到manifest 文件的错误信息
2)修改application 中的应用样式,因为导出的 AAR 文件将不带自定义的样式,故不能从style.xml里取系统样式
3)同时需要删除res\Values目录下的styles.xml文件
4)修改mipmap重命名为drawable
有点乱但是按照步骤来哈 哈哈哈
修改AndroidManifest.xml
5.android端部署成功导出arr包
按照惯例先预编译一下然后
或者
然后把arr包还有androidMainifest.xml一起放到unity的android路径下
二.部署Uniuty端
unity端的测试代码
#region 模块信息
// **********************************************************************
// Copyright (C) 2018 Blazors
// Please contact me if you have any questions
// File Name: Director
// Author: romantic123fly
// WeChat||QQ: at853394528 || 853394528
// **********************************************************************
#endregion
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class CallAndroidTest : MonoBehaviour {
private Text mText;
void Start()
{
mText = GameObject.Find("MsgText").GetComponent();
}
public void MyShowDialog()
{
// Android的Java接口
AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject jo = jc.GetStatic("currentActivity");
// 参数
string[] mObject = new string[2];
mObject[0] = "赤灵";
mObject[1] = "终于起作用了";
// 调用方法
string ret = jo.Call("ShowDialog", mObject);
setMsg(ref ret);
}
public void MyShowToast()
{
AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject jo = jc.GetStatic("currentActivity");
jo.Call("ShowToast", "正在打印吐司。。。");
}
public void BeCallFunc(string _content)
{
setMsg(ref _content);
}
private void setMsg(ref string _str)
{
mText.text = _str;
}
}
然后打包运行
完整源码demo地址:https://download.csdn.net/download/qq_37310110/10438314
参考博客地址:https://blog.csdn.net/qq_37310110/article/details/80455663
欢迎加入Unity业内qq交流群:956187480
qq扫描二维码加群