求助各位大神帮我看下 Unity3d 与 Android 交互的问题

 我来答
huanglenzhi
推荐于2018-05-11 · 知道合伙人数码行家
huanglenzhi
知道合伙人数码行家
采纳数:117538 获赞数:517193
长期从事计算机组装,维护,网络组建及管理。对计算机硬件、操作系统安装、典型网络设备具有详细认知。

向TA提问 私信TA
展开全部
  1将Unity3D安装目录下的Unity\Editor\Data\PlaybackEngines\androidplayer\release\bin\classes.jar
  拷贝到Android工程的libs文件夹里:

  2
  右键单击classes.jar选择Build Path里面的Add to Build Path:

  3
  在MainActivity中继承UnityPlayerActivity。删除多余的方法,仅保留onCreate方法中的super.onCreate语句,如下:
  public class MainActivity extends UnityPlayerActivity {
  @Override
  protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  }
  }
  4

  添加要在unity中调用的方法,这里添加一个带一个参数的方法StartActivity来调用Android的Activity从而运行Android的代码。还添加了一个有返回值的方法GetInt,用来测试在Unity中获取android中方法的返回值。(貌似只能有一个UnityPlayerActivity,而且这个Activity不能是调用第三方SDK方法的Activity。UnityPlayerActivity只能作为Unity和Android交互的一个接口,在这里面再去调用其他的Activity)
  5

  package com.example.unitydemo;
  
  import android.content.Context;
  import android.content.Intent;
  import android.os.Bundle;
  
  import com.unity3d.player.UnityPlayerActivity;
  
  public class MainActivity extends UnityPlayerActivity {
  private Context mContext = null;
  @Override
  protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  mContext = this;
  }
  
  public void StartActivity(String name) {
  Intent intent = new Intent(mContext, WelcomeActivity.class);
  intent.putExtra("name", name);
  this.startActivity(intent);
  }
  
  public int GetInt()
  {
  return 1;
  }
  }

  6
  然后Clean一下当前工程,避免一些不必要的问题。

  然后在Build Project

  右键单击工程,选择Export

  选择JAR file

  右边全部勾选,输入JAR的路径和名字,然后单击finish:

  在Unity项目中创建一个Plugins,如下的目录结构

  其中bin文件夹放我们刚刚导出的JAR包,libs文件夹放需要用的第三方库文件,res文件夹和AndroidManifest直接从Android工程中拷贝过来。
  (除了res文件夹不能动,其他的最好都不要放在单独的文件夹里面,貌似除了jar能加载出来,其他格式的文件如果放在其他目录下会加载不出来)
  然后在Unity里面创建一个脚本文件,绑定在MainCamera上(当然也可以绑定在其他的对象上),如下:

  在脚本文件中写如下代码:

  using UnityEngine;
  using System.Collections;
  public class Demo : MonoBehaviour {
  void Start () {
  }
  void Update()
  {
  //当用户按下手机的返回键或home键退出游戏
  if (Input.GetKeyDown(KeyCode.Escape) || Input.GetKeyDown(KeyCode.Home) )
  {
  Application.Quit();
  }
  }
  void OnGUI()
  {
  if (GUI.Button(new Rect(Screen.width * 0.1f, Screen.height * 0.1f, Screen.width * 0.8f, Screen.height * 0.1f), "StartActivity"))
  {
  AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
  AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
  jo.Call("StartActivity", "第一个Activity");
  }
  if (GUI.Button(new Rect(Screen.width * 0.1f, Screen.height * 0.2f, Screen.width * 0.8f, Screen.height * 0.1f), "GetInt"))
  {
  AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
  AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
  Debug.Log(jo.Call<int>("GetInt"));
  }
  }
  }

  然后生成APK文件,记得先把包名改成与Android工程一样的包名。

  要测试,只能在手机上测。
  最终效果图:

  17
  单击StartActivity,启动Android的一个Activity,单击GetInt,Console显示1
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式