一天了,从早上九点到晚上凌晨2两点一直在鼓捣这个玩意。死活就是弄不好,现在终于成功了,但还不能睡觉,抓紧把这次成功的过程记录下来。
首先,android studio 和 Unity的版本
这个真的可能会有很大的影响。起码我一开始死活弄不对,两个全部重新安装了版本之后才鼓捣了半天成功的。
以及android studio 版本是 3.0.1
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------
以一个简单的函数为例,在android studio中使用java实现一个返回 a+b 的函数 (siki学院bathur老师所讲的例子)
首先在Android studio中新建一个project
我的配置如下
创建一个Empty Activity,进入工程后等待一会。
我们要用的是生成的library而不是activity,故进入后,按照如下方法创建一个module
名字设置为 “AndroidAdd”
自动配置完成后,首先添加一个activity作为MainActivity。
再一次,我们用的是library而不需要界面,先把界面的配置layout下的文件删掉
然后修改MainActivity中继承的类,但首先要将Unity3d中的classes拷贝过来。(拷贝的时候切换到project视图)
然后将其添加为库
然后就可以对MainActivity文件进行如下编写了
package com.zju.ichigo.androidadd;
import android.os.Bundle;
import com.unity3d.player.UnityPlayerActivity;
public class MainActivity extends UnityPlayerActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
public int minus(int a,int b){
return a-b;
}
}
为了使其能够在unity3d中使用,还需要配置Menifest文件,即AndroidManifest.xml(切换回android视图,找到它),进行如下编写
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.zju.ichigo.androidadd">
<application
android:allowBackup="true"
android:label="UnityAndroidAdd"
android:supportsRtl="true">
<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>
这就差不多了,可以创建了,点击build module,成功后就可以在project视图下找到输出的aar文件。
以及我们还需要manifest文件,在这里找到他
把这两个分别拷贝到一个文件夹中,还要进行一定的处理才可以交给unity3d使用。
要对其进行的处理,首先修改这个manifest文件
把这里的报名修改成你想要的app的名字,必须修改,否则和aar包里的library报名冲突在生成apk的时候会报错。
然后使用解压软件打开aar包裹,将位于外面的classes替换调libs中的classes文件。
然后再把这个aar包里面的AndroidManifest.xml文件拷贝出来进行修改。
只需要删除label那一句就可以了
到此为止就可以打开unity3d了,新建一个项目,将平台切换为android,Build system选项设置为gradle
然后点击player settings 进行签名,包名的设置。
注意。此处设置的报名必须和aar包外面的Manifest文件中的包名一样。
然后在Assets文件夹下创建Plugins文件夹,再在其下创建Android文件夹,将两个文件拷贝过来。效果如下所示
然后创建一个c#脚本,进行如下的简单编写,致于具体函数怎么调用可从网上搜到,很简单而且方法固定
(我其实在安卓那边编写的代码是minus即减法,不过包名还是add。。。忘记改了,)
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class Test : MonoBehaviour {
public Text text;
// Use this for initialization
void Start () {
AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
text.text = jo.Call<int>("minus", 55, 2).ToString();
}
}
这样在Unity3d中创建一些UI组件,讲一个文本组件赋给这个公共的Text,然后将这个脚本挂载到一个游戏物体上。就可以输出函数调用的结果了。
最后进行build,导出apk到手机上,运行效果如下所示。
在折腾了整整一天后,真的感觉,这就是最美的画面了。