Unity3d 与 Android之间的互相调用
16lz
2021-12-04
Unity3d 与 Android之间的互相调用
Unity3d 开发的过程中,总会遇到各种调用Android的情况,本文以Eclipse IDE开发
-
引入classes.jar包,路径:打开文件位置->Data->PlaybackEngines->androidplayer->Variations->mono->release->classes->classes.jar。
-
创建的MainActivity需要继承UnityPlayerActivity。cs脚本中调用Android代码
AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
-
调用Android常用的api 如下
-
Android调用Unity3d代码
UnityPlayer.UnitySendMessage("Main Camera", "OnMessage", "Hello u3d"); //Main Camera 是Scenes中的Objtct,OnMessage 是方法,最后传入参数
-
创建Eclipse工程, Package Name的名字需要与Unity3d 中的Package Name 相同
-
编写MainActivity类
import android.app.Activity;import android.content.Context;import android.os.Bundle;import android.view.Menu;import android.view.MenuItem;import com.unity3d.player.UnityPlayer;import com.unity3d.player.UnityPlayerActivity;public class MainActivity extends UnityPlayerActivity { Context mContext = null;String strData = "";@Overrideprotected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);//setContentView(R.layout.activity_main);mContext = this;UnityPlayer.UnitySendMessage("Main Camera", "OnMessage", "Hello u3d");//调用Unity3d方法}public void SetData(String str){ strData = str;}public String GetData(){ return strData;}}
-
导出jar包,只需要导出src目录即可
-
Unity3d 导入jar包,放置路径Assets->Plugins->Android->libs,导入AndroidManifest.xml文件到Assets->Plugins->Android,并修改AndroidManifest.xml文件,特别需要注意android:icon!!!
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.mygame" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="16" android:targetSdkVersion="21" /> <application android:allowBackup="true" android:icon="@drawable/app_icon" android:label="@string/app_name" > <activity android:name=".MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> <meta-data android:name="unityplayer.UnityActivity" android:value="true" /> </activity> </application></manifest>
-
Unity3d 编写cs代码,添加到Main Camera上
using System.Collections;using System.Collections.Generic;using UnityEngine;public class Launch : MonoBehaviour { private AndroidJavaObject jo; // Use this for initialization void Start () { Debug.Log("Launch"); if (Application.platform == RuntimePlatform.Android) { AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); if (jc != null) jo = jc.GetStatic<AndroidJavaObject>("currentActivity"); } SetData("abc"); GetData(); }// Update is called once per framevoid Update () { } public void OnMessage(string str) { Debug.Log("OnMessage " + str); } public void SetData(string str) { if (jo != null) jo.Call("SetData", str); } public void GetData() { if (jo != null) { string str = jo.Call<string>("GetData"); Debug.Log("GetData " + str); } }}
Demo参考地址:https://download.csdn.net/download/wangningzk123/12581772
更多相关文章
- 让Ubuntu和Android同时运行(Ubuntu on Android)
- Android(安卓)Studio中同步代码时报:Received status code 400 fr
- Android中webview跟JAVASCRIPT中的交互
- android:launchMode="singleTask" 与 onNewIntent(Intent intent
- 【Android】AIDL介绍和实例讲解
- Android问题笔记
- Android(安卓)中文 SDK —— ADT 14.0.0 (ADT14插件更新说明)
- 把应用跑在android上
- Android(安卓)图形系统剖析