博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Unity3d与Android交互
阅读量:5056 次
发布时间:2019-06-12

本文共 4105 字,大约阅读时间需要 13 分钟。

先看下效果

你一定会说,然并卵!

没错,这里只是一个最简单的例子,unity与android activity 互相传参数。
玩过手游的都知道,在你要为你心爱的游戏角色准备花钱买钻石,点击购买的时候,会弹出一个风格可能和游戏完全不符的界面,没错,那就是渠道sdk的支付界面了。
比如:

其实,在游戏上线之前呢,要接大量的渠道SDK啦,渠道有大量的用户,保证游戏有大量的导入量,用了用户,你的游戏才有可能赚钱。所以呢,游戏研发和渠道呢,要谈游戏分成,但是往往都是渠道占大头,谁叫用户至上。

游戏研发呢,自然不必为这个再分心力,这个渠道sdk的提供商会把它封装好,只提供接口给我们调用,传一些参数过去,就可以完成想要的操作了。至于这个sdk里面,怎么和服务器交互啦,界面搭的多好看啦,都是后话。因为最后还是要把结果参数传回到unity里面。

废话说了一大堆。

1.建一个Android项目。把Unity安装目录下面的classes.jar 导入到这个工程的buildpath里面。

2.unity里面点击一个button,打开一个新的 activity。比如说充值,打开支付的页面哦。或者点击一个button,关闭一个activity。

那么就涉及到activity切换。
activity的切换->Intent的使用(activity的切换会用到intent)
要两个activity之间做切换,那必须再建一activity咯

你可以自定义layout,怎么好看怎么弄,It is up to you !

layout:就是告诉android,我新建的activity要显示什么控件,控件按照什么排列方式显示的
记得改androidMainifest.xml ,把你刚加的activity加上。
androidMainifest.xml:就是描述android有几个activity。

新建的这个activity,要继承UnityPlayerActivity

//写好Android里交互部分public void test1(){    //调Unity里Testjoe函数,把参数传过去    UnityPlayer.UnitySendMessage("JOE", "Testjoe", "I am com android");} public void test2(final String msg){    runOnUiThread(new Runnable()    {        public void run()        {            //跳出一个提示。            Toast.makeText(MainActivity.this, msg, Toast.LENGTH_SHORT).show();        }     });} //切换到自定义的activity,Unity里面记得调用哦public void ToMyActivity(View view){    Intent myIntent = new Intent(this,MyActivity.class);    startActivity(myIntent);}

3.Unity里面的交互部分

using UnityEngine;using System.Collections; public class test1 : MonoBehaviour{    string content = "unity";     //Android里会调这个函数    public void Testjoe(string s)    {        this.content = s;    }     void OnGUI()    {        if (GUILayout.Button("调用Android函数1:BackCallUnityMethod", GUILayout.Height(100), GUILayout.Width(250)))        {            AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");            AndroidJavaObject jo = jc.GetStatic
("currentActivity"); jo.Call("test1"); } GUILayout.Box(this.content, GUILayout.Height(100), GUILayout.Width(200)); if (GUILayout.Button("调用Android函数2:Toast", GUILayout.Height(100), GUILayout.Width(250))) { AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); AndroidJavaObject jo = jc.GetStatic
("currentActivity"); jo.Call("test2","hello joe "); } if (GUILayout.Button("调用Android函数3:GetReturn", GUILayout.Height(100), GUILayout.Width(250))) { AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); AndroidJavaObject jo = jc.GetStatic
("currentActivity"); string s = jo.Call
("test3","joe"); this.content = s; } if (GUILayout.Button("调用Android函数4:Max(1,2)", GUILayout.Height(100), GUILayout.Width(250))) { AndroidJavaClass jc = new AndroidJavaClass("com.test.Max.Max"); int max = jc.CallStatic
("Max", 1, 2); this.content = max.ToString(); } if (GUILayout.Button("支付", GUILayout.Height(100), GUILayout.Width(250))) { AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); AndroidJavaObject jo = jc.GetStatic
("currentActivity"); jo.Call("ToMyActivity"); } if (GUILayout.Button("支付2", GUILayout.Height(100), GUILayout.Width(250))) { AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); AndroidJavaObject jo = jc.GetStatic
("currentActivity"); jo.Call("Tonew"); } }}

4.然后就是导出jar包给Unity用。

点选项目名字,file-export-java-jar file,导出jar,只需要src文件就够咯。其它都是不必要的文件(导出之前最好 project-clean一下)

bin下面放的就是导出的jar包

res可以从android工程里面直接拖进来
AndroidManifest.xml也可以直接拖进来

最后unity导出apk的包名要和android的包名一致。

之前的例子工程找不到了,其实知道了怎么交互,后面要做什么功能,就是在这基础上扩展了。

补充:

classes.jar

Unity打包apk时候,默认是是打包那个classes.jar的。

但是,如果Unity工程中的Plugins/Android下,有你自定义的jar,那么就会打包你自定义的。默认的就不会被打包了。
这样,你在自定义的jar里面,做一些自己想要的功能。(搭一个漂亮的充值界面,然后给渠道商充钱……)
类似于jar重载,现在你该理解了吧。

转载于:https://www.cnblogs.com/joeshifu/p/5489509.html

你可能感兴趣的文章
centos 图形界面和命令行界面切换(转载)
查看>>
Maven启用代理访问
查看>>
Primary definition
查看>>
第二阶段冲刺-01
查看>>
BZOJ1045 HAOI2008 糖果传递
查看>>
发送请求时params和data的区别
查看>>
JavaScript 克隆数组
查看>>
eggs
查看>>
一步步学习微软InfoPath2010和SP2010--第七章节--从SP列表和业务数据连接接收数据(4)--外部项目选取器和业务数据连接...
查看>>
如何增强你的SharePoint 团队网站首页
查看>>
FZU 1914 Funny Positive Sequence(线性算法)
查看>>
oracle 报错ORA-12514: TNS:listener does not currently know of service requested in connec
查看>>
基于grunt构建的前端集成开发环境
查看>>
MySQL服务读取参数文件my.cnf的规律研究探索
查看>>
java string(转)
查看>>
__all__有趣的属性
查看>>
BZOJ 5180 [Baltic2016]Cities(斯坦纳树)
查看>>
写博客
查看>>
利用循环播放dataurl的视频来防止锁屏:NoSleep.js
查看>>
品味第一杯瓜哇咖啡
查看>>