需求:在游戲中彈窗消息,調起安卓的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使用。
更多參考: