介于网上看过不少unity和Android交互的教程,都或多或少的漏掉了一些部分,致使编译过程当中出现各类问题,特此整理一份教程,仅供参考java
本次实现的是在游戏界面下方显示一个banner广告,而后控制显示和隐藏的功能
Android和unity之间的交互从代码上来看其实很简单
unity调用安卓的代码是:android
// 加载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的代码是:app
// 第一个参数是unity中的对象名字,记住是对象名字,不是脚本类名 // 第二个参数是函数名 // 第三个参数是传给函数的参数,目前只看到一个参数,而且是string的,本身传进去转吧 UnityPlayer.UnitySendMessage("UI_ROOT","onMsgFromAndroid",msg);
下面的步骤就是机械化的了,就不解释咯~~~虽然上面也没啥解释eclipse
PS:建议选2.3.3以上的Android版本ide
先在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包了,继续下一步ui
在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一下this
代码超级简单,像这样:debug
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吧~~~