转载请注明出处:http://blog.csdn.net/ghostwolfliu/article/details/48027875

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的
Unity Android交互过坑指南_第1张图片
就是框框里那个东东,我改了个名字而已
然后将主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广告….
然后各种资源文件摆好,下面开始打包
Unity Android交互过坑指南_第2张图片
只选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,别的教程没有
像这样:
Unity Android交互过坑指南_第3张图片
现在你可以尝试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吧~~~

更多相关文章

  1. android studio gradle 多渠道打包之完全详解(打包系列教程之四)
  2. 修改Android中的文件权限
  3. Android录音文件在IOS上播放不出来的问题
  4. Android高手进阶教程(十一)--Android 通用获取Ip的方法(判断手机
  5. 几行代码看程序员的水平——Android文件命名规范
  6. Android — 创建文件及文件夹
  7. Android文件选择器的实例分享

随机推荐

  1. 【MySQL】数据库版本升级:mysql 5.6 升级
  2. 《Java编程思想(第4版)》读书笔记
  3. 几款代码高亮组件的体验,说不定你以后会用
  4. 单例模式,这个面试题真那么简单吗?
  5. 分享 1 个一次性免费获得极客时间 2-3 个
  6. 《Java入门1•2•3》读书笔记
  7. 该不该造自己的轮子?
  8. 解答 H 大的公布的 10 道 Java 测试题
  9. 《***与画家》读书笔记
  10. MySQL 如何进行慢 SQL 优化?