Unity3D与Android交互介绍

Unity3D与Android交互介绍一.简介没有简介,直接上例子。二.实例主场景:需要实现效果。点击chen按钮,弹出一个Android的对话框,点击resturnstaticchen按钮,在unity界面内Debug出调用android方法返回的值,最后一个可以无视,效果和chen()一样,只是这个是一个静态方法,完成这里,unity调用Android的就搞定了。大致思路是点击NGUI的按钮调用一个物体上的脚本的里的函数方法,这个方法就是封装对Android的调用,这里用摄像机,摄像机的脚本取名AndroidContril,写下三个public方法chen(),resturnstaticchen(),chen() 我们不可能在这里里面直接写调用Android类的方法,这样在电脑Unity中运行的时候会说找不到Android类的error,所以我们要先处理一下平台,写一个类,在这个类中判断平台对不同平台处理不同的调用结果,预处理,你懂的类名就叫platmHelper吧#if UNITY_EDITOR //Unity环境中public class PlatmforHelper{public static void Chen(){Debug.Log("您当前实用的平台是"+Application.platform);}public static void staticChenk(){Debug.Log("您当前实用的平台是"+Application.platform);}public static stringresturnstaticChenk(string str){Debug.Log("您当前实用的平台是"+Application.platform);}}#elif UNITY_ANDROID //Android 环境中public class PlatmforHelper{ //后面说}#endif在AndroidContril的相关方法中调用PlatmforHelper的相关方法就不会报错了到这里我还不知道我要调用Android的什么类所以我直接生成Android工程看看再说,前一个勾选,后一个是包名,要更换,然后export。导成工程导入eclipse中,看我的工程我们看到就只有一个类,是一个activity,这个文件在Unity\Editor\Data\PlaybackEngines\androidplayer\com\unity3d\player下面也有,就是同一个,打开这个类看继承了NativeActivity的一个activity,毫无疑问,NativeActivity是activity的子类,在onCreate中就是设置了各种不要标题等等,然后把UnityPlayer这个view添加到当前的activity中。先不动这个类,我要写一个工具类,来调用我的安卓方法,简单起见,就在当前包写吧,就叫Androidhelper,顺便把工程名改一下,太长了,就改成dafeiji_这里面就要写Chen()、staticChenk()、resturnstaticChenk(string str),三个方法了,Chen()非静态,staticChenk静态,resturnstaticChenk(string str)有返回值因为调用Chen()和staticChenk() 是要弹出对话框,但是想想就知道,unity是以一个窗口的形式放在activity的布局中,所以Unity是在子线程中运行,Android只能在主线程改变界面ui,还需要一个handler来通知主线程弹框看我代码先就实现一个Chen()吧packagecom.android.hello;publicclassAndroidHelper {PrivatestaticActivitymyaActivity=UnityPlayerNativeActivity.activity;//获得UnityPlayerNativeActivity,这个是自己定义的静态变量,见后面解释private Handler myHandler;//handler传递消息publicvoidChenk(){Message msg = newMessage();msg.what = 1;getHandler().sendMessage(msg);//被调用的时候就发送handler消息}privatestatic Handler getHandler(){returnnew Handler(Looper.getMainLooper())//一定要写这个参数把handler加到主线程的looper{@OverridepublicvoidhandleMessage(Message m