转载请注明出处: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的

就是框框里那个东东,我改了个名字而已
然后将主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吧~~~

更多相关文章

  1. android JNI调用
  2. mk中的 android:sharedUserId和LOCAL_CERTIFICATE作用 应用程序
  3. 完美Android(安卓)Cursor使用例子(Android数据库操作)
  4. Android第三章 (UI)
  5. Android(安卓)SDK下载慢的最给力解决办法
  6. mybatisplus的坑 insert标签insert into select无参数问题的解决
  7. NPM 和webpack 的基础使用
  8. Python技巧匿名函数、回调函数和高阶函数
  9. 【阿里云镜像】使用阿里巴巴DNS镜像源——DNS配置教程

随机推荐

  1. android 进程
  2. This Android SDK requires Andriod Deve
  3. Android Apps开发环境搭建
  4. Android 完全退出 App,Activity管理者 (Exi
  5. Android-gradle配置详解
  6. Android 资源文件夹下的文件不能有大写字
  7. Android的启动模式
  8. 如何解决Android运行时异常“Binary XML
  9. 初学Android,手机管理器之监听手机来电(
  10. android ndk第一步使用ndk和Cmake编译.so