Unity与Android Studio交互
Unity与Android Studio交互
工作过程中接触了很多新的知识,但一直没想起来记录下来,导致有很多都记不清楚,于是决定开始将知识进行汇总以备后续的学习或使用。因为是初次使用,所以可能有很多错误的地方,希望大家及时回复我以进行改正,谢谢。
前提
在工作过程中需要与Android端进行配合使用,但是在网上找到的交互方式大多是生成jar或是arr包。我试了很多种方法总是出错,最后尝试了直接用Unity导出,这次终于成功了。
下面是我的具体操作
一、创建一个Unity工程
我使用的是Unity 7.1.2,算是比较新的版本了,现在创建一个Text以及两个Button,分别命名为 Button01,Button02,令外加一个Cube,将Canvas设置成Screen Space-Camera
C#:挂在MainCamera上的脚本Test
using UnityEngine;
using UnityEngine.UI;
public class Test : MonoBehaviour {
//定义一个int 变量用来接收java传过来的参数
int index = 0;
string angle;
public Text mtext;
//一个旋转物体
public GameObject cube;
public void OnClick1()
{
AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
/* jo.call | java对象的函数名字
* <> | 函数返回值类型
* ("") | 调用的方法名 */
index = jo.Call<int>("makePauseUnity");
angle = jo.Call<string>("makeRotateUnity");
mtext.text = index.ToString();
RotateCube(angle);
}
public void OnClick2()
{
print("OnClick1被执行到了");
/* com.android.unityToandroid : Android工程定义的包名
* UnityPlayerActivity :java方法所在的类名 */
AndroidJavaClass jc = new AndroidJavaClass("com.android.unityToandroid.UnityPlayerActivity");
//m_instance : UnityPlayerActivity类中自己声明
AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("m_instance");
//ShowMessage : java对应的方法
//Unity : 向这的代码传一个参数
jo.Call("ShowMessage", "Unity");
}
public void RotateCube(string angle)
{
cube.transform.Rotate(Vector3.up, float.Parse(angle));
}
}
二、打包Android工程
1、File->Build Setting后弹出
1)选择android平台
2)点击player settings
3)更改包名(★很重要)
4)将Build System改为Gradle
5) 勾选Export Project(如果不勾,导出为apk)
6) Export
导出一个文件夹
可能会出现错误:release builds have to be signed when using Gradle,这是因为没有签名,接下来开始签名设置
2、Gradle签名
1)关闭other settings,打开publishing settings,点击Browse Keystore ,新建文件夹保存Key,点击确定
2)点击Unsigned(debug)之后会有一个下拉列表选择Create a new Key。并弹出一个二级弹框设置。
Alias:设置key的名称
Validity:有效期
3)点击CreatKey后,在Alias选择刚刚创建的Key的名字.输入Key的密码。Ctrl+s保存,之后点击Build。
3、Android Studio
导入Android Studio,如下图
打开UnityPlayerActivity,在此界面进行编译
代码:
package com.andrtoid.unityToandroid;
import com.unity3d.player.*;
public class UnityPlayerActivity extends Activity
{
protected UnityPlayer mUnityPlayer;referenced from native code
private int index;
private String string;
public static UnityPlayerActivity m_instance=null;
// Setup activity layout
@Override protected void onCreate (Bundle savedInstanceState)
{
requestWindowFeature(Window.FEATURE_NO_TITLE);
super.onCreate(savedInstanceState);
getWindow().setFormat(PixelFormat.RGBX_8888); // <--- This makes xperia play happy
mUnityPlayer = new UnityPlayer(this);
setContentView(mUnityPlayer);
mUnityPlayer.requestFocus();
m_instance=this;
}
//Unity调用的ShowMessage方法并传递参数 str
public void ShowMessage(final String str){
Log.i("调用信息", "我被onclik2调用了");
runOnUiThread(new Runnable() {
@Override
public void run() {
Show(str);
}
});
}
public void Show(String str){
Toast.makeText(this, str+"成功调用了android中的函数", Toast.LENGTH_LONG).show();
}
//Unity调用的makePauseUnity方法并返回index
public int makePauseUnity(){
Log.i("调用信息","我被onclick1调用了");
index++;
return index;
}
//这是我模仿上式写的,不一定完全正确
public String makeRotateUnity(){
Log.i("调用信息","我被onclick1调用了");
string="80";
return string;
}
}
编译结束,下面显示结果
推荐阅读
-
Android基础之Fragment与Activity交互详解
-
Android的WebView与H5前端JS代码交互的实例代码
-
Android APP与媒体存储服务的交互
-
Android开发使用json实现服务器与客户端数据的交互功能示例
-
Android中webview与JS交互、互调方法实例详解
-
Android Studio finish()方法的使用与解决app点击“返回”(直接退出)
-
Android实现与Apache Tomcat服务器数据交互(MySql数据库)
-
Android studio项目代码与剪切板做对比的两种方法
-
Android Studio3.6.3 当前最新版本数据库查找与导出方法(图文详解)
-
详解Android activity与fragment之间的通信交互