标签:
最近在接触unity、对于unity和Android的交互,网上找了好多,大多都是一种方式,下面就说一下我使用后的心得。
首先:
unity调用Android,
unity代码:
AndroidJavaClass jc = new AndroidJavaClass ("com.unity3d.player.UnityPlayer"); AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject> ("currentActivity"); jo.Call ("login","");
Android代码:
public void login( String str ) { // 写上自己的操作 }
以上就是网上的方法。
当我自己实际测试的时候发现,Android这边的login()不一定要写在com.unity3d.palyer包名下的UnityPalyer类下。
你只需要把login()写在你自己定义包名下的UnityPlayerActivity.java中就可以了。当然了,该类肯定是继承Activity的。
你可以把鼠标放在unity代码的Call上查看方法可以填写的参数, 你会发现方法可以填写的参数可以是params object[]。也就是可以传递多个参数,以数组的形式传递给Android。
接下来是Android调用unity了。
例:
UnityPlayer.UnitySendMessage("btnTest", "showLog", "a#b#c");
这里要说明一下,UnitySendMessage的第一个参数是unity控件的名字,第二个参数是方法名,第三个参数是要传递的参数。而且只能传递一个参数(感觉好坑)。不过还好。你可以把你要传递的参数做成一个字符串传递过去,unity那边做分割字符串就行了。例如上面就是把a,b,c用#连接起来。unity那边用#作为分隔符去分割就OK了。
那么问题来了,脚本挂在的unity控件名字不好找怎么办。其实还有个办法轻松搞定,那就是在脚本的Start()方法中指定name为你方法传递的控件名字就OK了。
如我上面的方法中要找的控件是btnTest,则:
void Start () { this.name = "btnTest"; }
以上就是网上普遍转载的方法。
接下来,我介绍下在项目中我发现一个大神写的unity调用Android方法(当然,肯定和上面的不同)。
public void CallFunction(string functionName, params object[] args) { if (androidClass == null) { androidClass = new AndroidJavaClass("com.**.**.sdk.DemoSDK"); } androidClass.CallStatic(functionName, args); } public void initSDK() { this.CallFunction("initSDK", "DemoNSDK", "CallBackFunc", "a”, "b", "c"); }
解释一下: new AndroidJavaClass中的参数com.**.**.sdk.DemoSDK,com.**.**.sdk为包名,DemoSDK为类名。方法名字就是initSDK。
标签:
原文地址:http://www.cnblogs.com/Colored-Mr/p/5677209.html