Unity3d与Android交互
先看下效果

你一定会说,然并卵!
没错,这里只是一个最简单的例子,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(), GUILayout.Width()))
{
AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
jo.Call("test1");
} GUILayout.Box(this.content, GUILayout.Height(), GUILayout.Width()); if (GUILayout.Button("调用Android函数2:Toast", GUILayout.Height(), GUILayout.Width()))
{
AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
jo.Call("test2","hello joe ");
} if (GUILayout.Button("调用Android函数3:GetReturn", GUILayout.Height(), GUILayout.Width()))
{
AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
string s = jo.Call<string>("test3","joe");
this.content = s;
} if (GUILayout.Button("调用Android函数4:Max(1,2)", GUILayout.Height(), GUILayout.Width()))
{
AndroidJavaClass jc = new AndroidJavaClass("com.test.Max.Max");
int max = jc.CallStatic<int>("Max", , );
this.content = max.ToString();
} if (GUILayout.Button("支付", GUILayout.Height(), GUILayout.Width()))
{
AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity"); jo.Call("ToMyActivity");
} if (GUILayout.Button("支付2", GUILayout.Height(), GUILayout.Width()))
{
AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("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重载,现在你该理解了吧。
- 本文固定链接: http://www.shihuanjue.com/?p=109
- 转载请注明: 乔 2015年09月27日 于 是幻觉 发表
Unity3d与Android交互的更多相关文章
- Unity3D 与android交互流程步骤
1.Android端代码可以在Eclipse中开发(AndroidStudio没有试,应该也可以) 2.Unity3D端代码要在Unity中开发 3.Android和Unity3D端,两边都需要加入一 ...
- [Unity3D]Unity+Android交互教程——让手机"动"起来
想要用Unity实现一个二维码扫描的功能,然后网上找插件,找到一个貌似叫EasyCodeScanner,但下载下来用用,真不好使,一导入运行就报错,调好错了再运行发现点按钮没反应,反复试了几遍发现还是 ...
- [Unity3D]Unity+Android交互教程——让手机"动"起来
想要用Unity实现一个二维码扫描的功能,然后网上找插件,找到一个貌似叫EasyCodeScanner,但下载下来用用.真不好使,一导入执行就报错.调好错了再执行发现点button没反应.重复试了几遍 ...
- [Unity3D]Unity3D游戏开发之Unity与Android交互调用研究
各位朋友,大家好,我是秦元培,欢迎大家关注我的博客,我的博客地址是blog.csdn.net/qinyuanpei.在前一篇文章中,我们研究了Android平台上Unity3D的手势操作并在之前的基础 ...
- Unity3D游戏开发之Unity与Android交互调用研究
各位朋友,大家好,我是秦元培,欢迎大家关注我的博客,我的博客地址是blog.csdn.net/qinyuanpei.在前一篇文章中,我们研究了Android平台上Unity3D的手势操作并在之前的基础 ...
- UNITY3D与iOS交互解决方案
原地址:http://bbs.18183.com/thread-456979-1-1.html 本帖最后由 啊,将进酒 于 2014-2-27 11:17 编辑 “授人以鱼,不如授人以渔”,以UNIT ...
- Unity3D调用android方法(非插件方式)
关于Unity3Dproject与androidproject的转换与合并,请參考我的另外一篇博客.假设你对Unity3Dproject增加到androidproject的过程不熟悉.也请先看完以下这 ...
- Unity与Android交互实现
主要参考了这篇文章: Unity与Android交互方案优化版 链接:https://www.jianshu.com/p/86b275da600e 自己的实现(unity获取内存和温度): andro ...
- Unity Android交互过坑指南
Unity Android交互过坑指南 介于网上看过很多unity和Android交互的教程,都或多或少的漏掉了一些部分,导致编译过程中出现各种问题,特此整理一份教程,仅供参考 介绍 本次实现的是在游 ...
随机推荐
- GDB调试D语言
GDB7.2后开始支持对D语言的调试 GUI前端 http://beej.us/guide/bggdb/#compiling GDB教程 http://blog.csdn.net/haoel/arti ...
- JAVA起名规范
1:包名 package com.cenzhongman.模块名.组件 必须全部小写,作为java文件第一行代码 2:类名 名词,表示一类实物,如:人类 首字母大写 3.接口名 形容词/副词,表示一种 ...
- mod-mono
http://go-mono.com/config-mod-mono/ 配置文件生成器 Mono remote debugging from Visual Studio http://stackov ...
- 微博RPC框架motan入门笔记
Motan 是一套高性能.易于使用的分布式远程服务调用(RPC)框架. 功能 支持通过spring配置方式集成,无需额外编写代码即可为服务提供分布式调用能力. 支持集成consul.zookeeper ...
- IoC/DI基本思想的演变
---------------------------------------------------------------------------------- (1)IoC/DI的概念 IoC ...
- Bash 为何要发明 shopt 命令
在 Bash 中,有两个内置命令用来控制 Bash 的各种可配置行为的开关(打开或关闭),这些开关称之为选项(option).其中一个命令是 set,set 命令有三种功能:显示所有的变量和函数:修改 ...
- iOS为真机调试增加scribble来定位野指针
尽管在ARC中,野指针出现的频率已经大大降低了,但是仍然会有野指针困扰着我们. 在模拟器调试中,我们可以开启scribble或者zombieObject来将已经释放的内存填充无意义的内容,能够将一些非 ...
- ASM:《X86汇编语言-从实模式到保护模式》第15章:任务切换
15章其实应该是和14章相辅相成的(感觉应该是作者觉得14章内容太多了然后切出来了一点).任务切换和14章的某些概念是分不开的. ★PART1:任务门与任务切换的方法 1. 任务管理程序 14章的时候 ...
- Nodejs学习笔记(十二)--- 定时任务(node-schedule)
目录 写在之前 Cron风格定时器 通配符解释 范围触发 递归规则定时器 对象文本语法定时器 取消定时器 写在之后 写在之前 在实际开发项目中,会遇到很多定时任务的工作.比如:定时导出某些数据.定时发 ...
- NSLOOKUP命令使用
nslooup命令,可以用来检测dns服务器是否可用,以及域名对应的真实ip,在一些网络dns不稳定的情况下可以使用,用来正确访问网站. Microsoft Windows [版本 6.1.7601] ...