Unity Android交互过坑指南
Unity Android交互过坑指南
介于网上看过很多unity和Android交互的教程,都或多或少的漏掉了一些部分,导致编译过程中出现各种问题,特此整理一份教程,仅供参考
介绍
本次实现的是在游戏界面下方显示一个banner广告,然后控制显示和隐藏的功能
Android和unity之间的交互从代码上来看其实很简单
unity调用安卓的代码是:
// 加载unity的交互对象,照着写就是了,没有变化
AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
// 调用Android中写好的public函数
// 可以传参数,参数类型是params[],所以~~~
// 像这样就可以了 jo.Call("u3dCallHideBanner",参数1,参数2,参数3);
jo.Call("u3dCallHideBanner");
Android调用unity的代码是:
// 第一个参数是unity中的对象名字,记住是对象名字,不是脚本类名
// 第二个参数是函数名
// 第三个参数是传给函数的参数,目前只看到一个参数,并且是string的,自己传进去转吧
UnityPlayer.UnitySendMessage("UI_ROOT","onMsgFromAndroid",msg);
正式开工
下面的步骤就是机械化的了,就不解释咯~~~虽然上面也没啥解释
第零步 随便新建个Android工程
PS:建议选2.3.3以上的Android版本
第一步 编译jar包
先在unity的安装目录下找到一个classes.jar文件
我的路径是"D:\Program Files\Unity\Editor\Data\PlaybackEngines\androidplayer\release\bin"
各位自行类比 ABCDEFG~~~~
然后将这个文件复制到Android工程下的libs文件中,复制进去就好了,eclipse会自动添加到buildpath的
就是框框里那个东东,我改了个名字而已
然后将主Activity改成需要的样子
public class MainActivity extends UnityPlayerActivity {
private Activity activity = this; // must be an Activity
WFSUtils wfsUtils;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
wfsUtils = WFSUtils.getInstance(activity);
// 添加gameview
FrameLayout gameLayout = (FrameLayout) findViewById(R.id.fl_game);
gameLayout.addView(this.a);
// 添加banner
FrameLayout bannerWrapper = (FrameLayout) findViewById(R.id.fl_ad);
bannerWrapper.addView(wfsUtils.getBannerView());
this.a.requestFocus();
}
public void u3dCallShowBanner() {
wfsUtils.showBanner();
sendMessageToUnity("响应了显示Banner");
}
private void sendMessageToUnity(String msg) {
// 第一个参数是unity中的对象名字,记住是对象名字,不是脚本类名
// 第二个参数是函数名
// 第三个参数是传给函数的参数,目前只看到一个参数,并且是string的,自己传进去转吧
UnityPlayer.UnitySendMessage("UI_ROOT","onMsgFromAndroid",msg);
}
}
记住,继承的是UnityPlayerActivity,是UnityPlayerActivity,是UnityPlayerActivity,重要的事说三遍~~~
然后布局可以自己改,我的是像这样的
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/base"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen"
tools:context="${relativePackage}.${activityClass}" >
<FrameLayout
android:id="@+id/fl_game"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#FFF" >
</FrameLayout>
<FrameLayout
android:id="@+id/fl_ad"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true" >
</FrameLayout>
</RelativeLayout>
其实很简单,上面放我们的GameView,下面放个banner广告....
然后各种资源文件摆好,下面开始打包
只选src,不管你有不有调用第三方库,都直选src,其他教程木有这个
只选src,不管你有不有调用第三方库,都直选src,其他教程木有这个
只选src,不管你有不有调用第三方库,都直选src,其他教程木有这个
然后就打包出jar包了,继续下一步
第二步 在unity中配置项目
在unity中创建如下几个目录
不要问能不能改。。。不能改!!! unity官方手册上有说
然后刚才打包出来的jar包复制到bin目录下
Android中libs文件夹下所有文件复制到libs文件夹
Android中res文件夹下所有文件复制到res文件夹
然后~~~~
重点来了,删掉unity自己的classes.jar文件,就是我的这个u3dlibs.jar,别的教程没有
重点来了,删掉unity自己的classes.jar文件,就是我的这个u3dlibs.jar,别的教程没有
重点来了,删掉unity自己的classes.jar文件,就是我的这个u3dlibs.jar,别的教程没有
像这样:
现在你可以尝试build一下项目,看是否报错,如果报错,请重复前面几个步骤,or Google一下
第三步 在unity中编写交互代码
代码超级简单,像这样:
public void showBanner()
{
AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
jo.Call("u3dCallShowBanner");
}
public void hideBanner()
{
debugUI.onMsg("[u3d]u3dCallHideBanner");
// 加载unity的交互对象,照着写就是了,没有变化
AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
// 调用Android中写好的public函数
// 可以传参数,参数类型是params[],所以~~~
// 像这样就可以了 jo.Call("u3dCallHideBanner",参数1,参数2,参数3);
jo.Call("u3dCallHideBanner");
}
void onMsgFromAndroid(string str)
{
debugUI.onMsg("[Fr:Android]" + str);
}
然后unity基本事件响应我就不解释了
如果你看到这里都还编译不过,联系我QQ 821580467吧~~~
Unity Android交互过坑指南的更多相关文章
- [Unity3D]Unity+Android交互教程——让手机"动"起来
想要用Unity实现一个二维码扫描的功能,然后网上找插件,找到一个貌似叫EasyCodeScanner,但下载下来用用,真不好使,一导入运行就报错,调好错了再运行发现点按钮没反应,反复试了几遍发现还是 ...
- [Unity3D]Unity+Android交互教程——让手机"动"起来
想要用Unity实现一个二维码扫描的功能,然后网上找插件,找到一个貌似叫EasyCodeScanner,但下载下来用用.真不好使,一导入执行就报错.调好错了再执行发现点button没反应.重复试了几遍 ...
- Unity与Android交互实现
主要参考了这篇文章: Unity与Android交互方案优化版 链接:https://www.jianshu.com/p/86b275da600e 自己的实现(unity获取内存和温度): andro ...
- [Unity3D]Unity3D游戏开发之Unity与Android交互调用研究
各位朋友,大家好,我是秦元培,欢迎大家关注我的博客,我的博客地址是blog.csdn.net/qinyuanpei.在前一篇文章中,我们研究了Android平台上Unity3D的手势操作并在之前的基础 ...
- Unity3D游戏开发之Unity与Android交互调用研究
各位朋友,大家好,我是秦元培,欢迎大家关注我的博客,我的博客地址是blog.csdn.net/qinyuanpei.在前一篇文章中,我们研究了Android平台上Unity3D的手势操作并在之前的基础 ...
- 【Unity与Android】01-Unity与Android交互通信的简易实现
前言 使用Unity也有不短的时间了,安卓包也打过不少,但是对Unity与Android的交互却知之甚少. 因工作需求,需要在Android平台接一些sdk(扩展功能).我就借此机会就了解了下Unit ...
- Android连接远程数据库的避坑指南
Android连接远程数据库的避坑指南 今天用Android Studio连接数据库时候,写了个测试连接的按钮,然后连接的时候报错了,报错信息: 2021-09-07 22:45:20.433 705 ...
- Android Tips – 填坑手册
出于: androidChina http://www.androidchina.net/3595.html 学习 Android 至今,大大小小的坑没少踩,庆幸的是,在强大的搜索引擎与无私奉献的 ...
- [Unity+Android]横版扫描二维码
原地址:http://blog.csdn.net/dingxiaowei2013/article/details/25086835 终于解决了一个忧伤好久的问题,严重拖了项目进度,深感惭愧!一直被一系 ...
随机推荐
- linux下使用tomcat下载中文文件报404not find
首先,大神指路:http://bbs.csdn.net/topics/391065011?page=1 相关的一些命令: 查看当前系统字符编码:env locale 查看系统支持的字符编码:local ...
- HDU 1542 Atlantics 线段树+离散化扫描
将 x 轴上的点进行离散化,扫描线沿着 y 轴向上扫描 每次添加一条边不断找到当前状态有效边的长度 , 根据这个长度和下一条边形成的高度差得到一块合法的矩形的面积 #include<iostre ...
- HDU 1540 区间合并线段树
题目大意: 就是给定一堆位置,进行删除还原,最后找到 t 位置上的最大连续位置 #include <cstdio> #include <cstring> #include &l ...
- zoj 1008 暴力枚举求解dfs+优化
/* 现将相同的合并计数. 再枚举判断是否符合当cou==n*n是符合就退出 */ #include<stdio.h> #include<string.h> #define N ...
- 校长的收藏(洛谷 U4534)
题目背景 XS中学的校长喜欢收集手办,家里面都是价值不菲的手办. 校长喜欢给手办们排队并且对于某些些区间内的手办喜爱有加. 现在,校长外出散步(找乐子),你潜入他的房间打算借(偷走)他的手办炫耀一下. ...
- sql server internal book
Frequently Bought Together + + Total price: $131.71 Add all three to CartAdd all three to List Buy t ...
- vmware9.0 install ubuntu
1)安装vmware 9.0 + 注册码2)因为是.bundle文件,执行下列命令:sudo chmod +x VMware-Workstation-7.1.1-282343.i386.bundle ...
- 解决MyEclipse中导入项目@Override错误
做项目的时候,同事那边电脑上编译通过的java代码,或者是网上下载的例子代码,导入project后却是编译不通过,总是@override报错,把@override去掉就好了,有时候@Override出 ...
- UIViewController 专题
呵呵 轻轻巧巧 UIViewController self setNeedsStatusBarAppearanceUpdate 刷新状态栏 (内部会重新调用 prefersStatusBarHi ...
- ZOJ 3209 Treasure Map (Dancing Links 精确覆盖 )
题意 : 给你一个大小为 n * m 的矩形 , 坐标是( 0 , 0 ) ~ ( n , m ) .然后给你 p 个小矩形 . 坐标是( x1 , y1 ) ~ ( x2 , y2 ) , 你选 ...