Unity和Android相互調用(SDK基礎)

Android端:html

package com.myc.sdkbase;
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 {

    private static MainActivity instance;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //setContentView(R.layout.activity_main);

        instance = this;
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }

    public int Sum(int x, int y)
    {
        return x + y;
    }

    public int Max(int x, int y)
    {
        return Math.max(x, y);
    }

    public static MainActivity GetInstance() 
    {
        return instance;
    }

    public void CallUnityFun(String str)
    {
        String receiveObj = "Main Camera";
        String receiveMethod = "Receive";
        UnityPlayer.UnitySendMessage(receiveObj, receiveMethod, str + " Android Call Unity.");
    }
}

Unity端:android

using UnityEngine;
using UnityEngine.UI;

namespace SDKBase
{
    public class MessageHandler : MonoBehaviour
    {
        private AndroidJavaClass m_jc;
        private AndroidJavaObject m_jo;

        [SerializeField]
        private Text m_text;

        [SerializeField]
        private Text m_textReceive;

        // Start is called before the first frame update
        void Start()
        {
            m_jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
            m_jo = m_jc.GetStatic<AndroidJavaObject>("currentActivity");
        }

        public void OnClickSum()
        {
            AndroidJavaClass jc = new AndroidJavaClass("com.myc.sdkbase.MainActivity");
            AndroidJavaObject jo = jc.CallStatic<AndroidJavaObject>("GetInstance");
            m_text.text = jo.Call<int>("Sum", 5, 3).ToString();
        }

        public void OnClickMax()
        {
            AndroidJavaClass jc = new AndroidJavaClass("com.myc.sdkbase.MainActivity");
            AndroidJavaObject jo = jc.CallStatic<AndroidJavaObject>("GetInstance");
            m_text.text = jo.Call<int>("Max", 5, 3).ToString();
        }

        public void OnClickCall1()
        {
            m_jo.Call("CallUnityFun", "Test1");
        }

        public void OnClickCall2()
        {
            AndroidJavaClass jc = new AndroidJavaClass("com.myc.sdkbase.MainActivity");
            AndroidJavaObject jo = jc.CallStatic<AndroidJavaObject>("GetInstance");
            jo.Call("CallUnityFun", "Test2");
        }

        public void Receive(string str)
        {
            m_textReceive.text = str;
        }
    }
}

參考連接:http://www.javashuo.com/article/p-ulxvwkld-y.htmlide

後來在看宣雨鬆博客時看到Unity調用Android部分能夠寫成:this

using (AndroidJavaClass jc = new AndroidJavaClass("com.myc.sdkbase.MainActivity")) 
{ 
    using (AndroidJavaObject jo = jc.CallStatic<AndroidJavaObject>("GetInstance")) 
    { 
        m_text.text = jo.Call<int>("Sum", 5, 3).ToString(); 
    } 
}

瞭解到using後面接實現了 IDisposable 的對象能夠在碼塊結束後自動Dispose。spa

相關文章
相關標籤/搜索