Unity調用安卓Android的Toast


需求:在游戲中彈窗消息,調起安卓的Toast

項目中需要做Unity和安卓交互時,經常需要通過安卓Toast來做簡單的輸出,以便於測試。

方法一:Unity中,C#主導

// Unity調用安卓的土司
public static void MakeToast(string info)
{
    AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
    AndroidJavaObject currentActivity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity");
    AndroidJavaClass Toast = new AndroidJavaClass("android.widget.Toast");
    currentActivity.Call("runOnUiThread", new AndroidJavaRunnable(() => {
        Toast.CallStatic<AndroidJavaObject>("makeText", currentActivity, info, Toast.GetStatic<int>("LENGTH_LONG")).Call("show");
    }));
    
    /*
    // 匿名方法中第二個參數是安卓上下文對象,除了用currentActivity,還可用安卓中的GetApplicationContext()獲得上下文。
    AndroidJavaObject context = currentActivity.Call<AndroidJavaObject>("getApplicationContext");
    */
}

這段代碼也是Unity調用安卓(C#主導)的經典例子。項目中可用同樣方法來尋找包,找到類成員,調用函數並傳參。

 

方法二:Android Studio中,Java主導

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.Toast;

public class MainActivity extends UnityPlayerActivity {

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

    // 該方法由Unity調用
    public void makeToast(final String msg){
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                Toast.makeText(MainActivity.this, msg, Toast.LENGTH_LONG);
            }
        });
    }
}

該方法需要將安卓項目導出aar包,作為插件導入到Unity的Assets目錄中,來給Unity使用。


更多參考:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM