Unity与Android交互

本文详细介绍如何在Unity中调用Android代码,并实现从Android回调Unity的方法。步骤包括创建Android项目、生成及引用.jar文件、编写Unity脚本等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Unity中调用Android中的方法,然后在Android中回调Unity

一、 创建一个Android工程(开发工具eclipse)



二、创建一个工程名,注意Package Name名为要和在Unity中设置的“Bundle Identifier”相同




三、 全部默认点击 下一步,下图为默认主Activity,可以自己修改名字,也可以不用改







四、在Unity安装目录Editor\Data\PlaybackEngines\androidplayer\bin\classes.jar

将 classes.jar 拖拽到Android项目的 libx 文件夹下




五、 选中工程名,在菜单来选择 “Project->Properties


跳出如下窗口




六、 点击“Add JARS....”。 选择拖进来的 classes.jar 包所在位置



七、 然后在 “Referenced Libraries”下会出现导入的 .jar



八、然后在创建好的工程中打开【Src】->com.example.testunity】。“MainActivity.java”



九、然后删除没用的 包和代码。如下所示

package com.example.sd;

import android.os.Bundle;


public class MainActivity extends Activity{

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    	// TODO Auto-generated method stub
    	super.onCreate(savedInstanceState);
    	
    	}
    }
}

十、 然后添加代码如下


package com.example.sd;

import android.os.Bundle;

//导入包
import com.unity3d.player.UnityPlayer;
import com.unity3d.player.UnityPlayerActivity;

//继承自 UnityPlayerActivity
public class MainActivity extends UnityPlayerActivity{

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    	// TODO Auto-generated method stub
    	super.onCreate(savedInstanceState);
    	
    }
    
    public static int numberX = 1;
    public int numberY = 1;
    
    //将要在Unity中调用的方法,无参数
    public static int getNumberX()
    {
    	return numberX + 10;
    }
    
    //将要在Unity中调用的方法,有参数
    public int getNumberY(int num)
    {
    	return numberY + num;
    }
    
    //在Unity中调用该方法,该方法回调 Unity中的方法
    //参数1为在Unity场景中的对象名字,参数2 该对象绑定脚本的一个方法名
    //参数3为参数
    public void CallUnity()
    {
    	//参数1为在Unity场景中的对象名字,
    	//参数2该对象绑定脚本中的一个方法,
    	//参数3为传递给 “AndroidCallBalk”的参数
    	UnityPlayer.UnitySendMessage("Main Camera", "AndroidCallBack", "");
    }
    
}



之后选中工程名右键刷新工程



十一、然后需要导出.jar包,选中工程名,右键选择 “Export....



十四、 选择 “Java->JAR file



十五、选择路径并创建一个 名字




十六、然后在 “JAR file”所指路径下会生成 myTestUnity.jar文件



十七、然后在Unity中【Asset->Plugins->Android】下,将创建的.jar包拖进去。

注意: Plugins 可以自己在Unity工程 Asset 下手动创建, Plugins 文件夹必须是 Asset 下的直接目录,把 Plugins文件夹放在其他文件夹中无效

将工程目录下 bin 下的  “res”文件夹 和 AndroidManifest.xml 拖拽到【Asset->Plugins->Android




如下图所示



AndroidManifest.xml如下


注意:有时候在 Build 时 AndroidManifest.xml 文件中可能会有地方出错自行检查修改


十八、接下来在Unity中创建脚本 “MyTest.cs代码如下


using UnityEngine;
using System.Collections;

public class MyTest : MonoBehaviour {

    private int testX = 10;
    private int testY = 10;

    void OnGUI()
    {
        if (GUI.Button(new Rect(50, 100, 100, 100), "Button getNumberX"))
        {
            // "com.unity3d.player.UnityPlayer" 为固定用法,即通过包名寻找UnityPlayer
            using (AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer"))
            {
                // "currentActivity" 为主Activity, 不要理解为当前的 Activity
                using (AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity"))
                {
                    //调用 eclipse中的 "getNumber"方法
                    testX += jo.CallStatic<int>("getNumberX");
                }
            }
        }

        if (GUI.Button(new Rect(50, 300, 100, 100), "Button getNumber"))
        {
            using (AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer"))
            {
                using (AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity"))
                {
                    testY += jo.Call<int>("getNumberY", 10);
                }
            }
        }

        if (GUI.Button(new Rect(50, 300, 100, 100), "Button CallUnity"))
        {
            using (AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer"))
            {
                using (AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity"))
                {
                    jo.Call("CallUnity");
                }
            }
        }

        GUI.Label(new Rect( 50, 550, 300, 100), "testX : " + testX.ToString());
        GUI.Label(new Rect(50, 700, 300, 100), "testY : " + testY);
        GUI.Label(new Rect(50, 850, 300, 100), "X + Y : " + (testX + testY));
    }

    //eclipse 中回调方法
    public void AndroidCallBack()
    {
        testX += 10;
        testY += 5;
    }

创建三个按钮,点击按钮调用eclipse中相应的方法


到此准备工作结束,如果在Unity上直接运行,点击按钮会报错,这是因为我们在Unity中调用了Android中的方法,我们需要将该项目打包为 apk,然后将该 apk安装在Android真机上,运行即可看到效果



注意:

Unity接  Android 第三方SDK
将如上eclipse导出的  .jar 包解压,在Unity中Project面板中创建  Plugins->Android
将解压出的 AndroidManifest.xml 放在Android文件夹下, 在Android下创建 bin 文件夹,将 eclipse导出的

.jar包放在 bin文件夹; 在Android下创建 libs 文件夹,  将SDK第三方库的 .jar 放在 libs文件夹下, 将

.jar中解压出的 res 文件夹拖拽到 Android文件夹下











评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值