码迷,mamicode.com
首页 > 移动开发 > 详细

unity和Android交互

时间:2016-07-17 09:26:03      阅读:262      评论:0      收藏:0      [点我收藏+]

标签:

最近在接触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。

unity和Android交互

标签:

原文地址:http://www.cnblogs.com/Colored-Mr/p/5677209.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!