Unity与Android接口互相调用

Unity与Android接口互相调用

Unity调用Android

制作jar包

1在Eclipse中创建一个安卓工程
2记住包名 com.gdidq.androidmethod
3将D:\Program Files (x86)\Unity\Editor\Data\PlaybackEngines\androidplayer\release\bin\classes,jar 引用到工程


编写java类

package com.gdidq.androidmethod;

import com.unity3d.player.UnityPlayerActivity;

public class UserMethod extends UnityPlayerActivity{

	public static int myadd(int a, int b)
	{
		System.out.println("int android myadd" );
		return a+b;
	}
	
	public static void testadd(int a , int b)
	{
		System.out.println("int android testadd result iS" + (a+b) );
	}
}
		
导出jar包  只导出这个文件就好 (涉及什么文件就勾选什么)

将导出的jar包放在指定目录 工程Assets\Plugins\Android\libs\

Unity -> PlayerSettings 安卓选项中 Bundle Identifer 和包名保持一致

Unity部分关键代码

using UnityEngine;
using System.Collections;

public class TestManager : MonoBehaviour
{
    private const string AndroidJavaFacebookClass = "com.gdidq.androidmethod.UserMethod";

#if UNITY_ANDROID
        private AndroidJavaClass usermethod;
        private AndroidJavaClass UserMethod
        {
            get
            {
                if (usermethod == null)
                {
                    usermethod = new AndroidJavaClass(AndroidJavaFacebookClass);

                    if (usermethod == null)
                    {
                        throw new MissingReferenceException(string.Format("AndroidFacebook failed to load {0} class", AndroidJavaFacebookClass));
                    }
                }
                return usermethod;
            }
        }
#endif

    // Use this for initialization
	void Start () {
	
	}
	
	// Update is called once per frame
	void Update () {
	
	}

    void OnGUI()
    {
       
        if (GUI.Button(new Rect(100,100,100,50),"testadd"))
        {
#if UNITY_ANDROID
            Debug.Log("touch button in Unity");
           UserMethod.CallStatic("testadd", 2,3);
           

            int temp =  UserMethod.CallStatic<int>("myadd", 2,3);
            Debug.Log("result in unity  = " + temp);
#endif
        }

    }
}


Android调用Unity

需要引用 com.unity3d.player.UnityPlayer 这个类

import com.unity3d.player.UnityPlayer;


UnityPlayer.UnitySendMessage("Unity中的GameObject","GameObject对应脚本中的函数名","传递到Unity中的string")


以传到Unity中的Main Camera为例
为Main Camera 创建一个脚本 在脚本中添加 FromAndroid 函数

 void FromAndroid(string str)
    {
        Debug.Log("Unity recieve str = " + str);
    }


修改java文件中的testadd函数  由于改函数没有返回值  试着调用Unity中的函数来将结果传递过去

public static void testadd(int a , int b)
	{
		System.out.println("int android testadd result iS" + (a+b) );
				//		对象名			接受消息的方法		发送的消息内容	
		UnityPlayer.UnitySendMessage("Main Camera","FromAndroid","dong test send message to unity from android + result"+ (a+b));
	}





你可能感兴趣的:(Unity与Android接口互相调用)