Unity与Android通讯
  • 博 客
  • 2297
  • 2022-06-30

  第一步 创建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('方法名称');


转载原创文章请注明,转载自: 小黑屋ART » 博 客 » Unity与Android通讯
内容如果存在侵权,请联系站长进行处理!
网页启动本地程序
批处理延迟关机
技术服务于需求,需求推动技术。这是一个相辅相成的过程,我们不仅仅是技术。