Unity与Android通讯
第一步 创建C# 接受和发送命令
【AndroidMessage.cs 】
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.SceneManagement;
namespace abc
{
public class AndroidMessage : MonoBehaviour
{
public string sceneName = "";
public List<SendParameter> SendParameters;
public class HanderEvent : UnityEvent<string> { }
public HanderEvent handerAndroid;
private void Awake()
{
if (sceneName.Length > 0) SceneManager.LoadScene(sceneName);
SceneManager.sceneLoaded += loadOverCallBack;
SceneManager.sceneLoaded += AndroidManager.Instance.loadOverCallBack;
}
void loadOverCallBack(Scene scene, LoadSceneMode sceneType)
{
Debug.Log("load over");
sendAndroid("loaded");
}
//UnityPlayer.UnitySendMessage("xxxxx", "handlerAndroid", "a"); 对象名称 函数名称() 参数
public void handlerAndroid(string value)
{
handerAndroid.Invoke(value);
}
public void sendAndroid(string fn)
{
SendParameter temp = SendParameters.Find(item => { return item.name.CompareTo(fn) == 0; });
AndroidManager.Instance.callAndroid(fn, temp.parameters);
}
[System.Serializable]
public class SendParameter
{
public string name;
public string[] parameters;
}
[System.Serializable]
public class Parameter
{
public string name;
public string value;
}
}
}【AndroidManager.cs 】
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.SceneManagement;
namespace abc
{
public class AndroidManager
{
private static AndroidManager instance;
public static AndroidManager Instance
{
get
{
if (instance == null)
{
instance = new AndroidManager();
instance.init();
}
return instance;
}
}
public void loadOverCallBack(Scene scene, LoadSceneMode sceneType)
{
Debug.Log("load over");
callAndroid("loaded");
}
#if UNITY_ANDROID
AndroidJavaClass jc;
AndroidJavaObject jo;
void init()
{
jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
jo = jc.GetStatic<AndroidJavaObject>("currentActivity");
}
public void callAndroid(string fn, params object[] v)
{
jo.Call(fn, v);
}
#else
void init()
{
}
public void callAndroid(string fn, params object[] v)
{
}
#endif
}
}第二步
将 AndroidMessage 挂载到场景 例如 handerMessage 的GameObject对象
安卓手机调用Unity
UnityPlayer.UnitySendMessage("xxxxx", "handlerAndroid", "a"); 对象GameObject名称 函数名称() 参数Unity发送消息到安卓
直接调用GameObject 的 sendAndroid('方法名称');
内容如果存在侵权,请联系站长进行处理!
