unity調android 本人目前發現android主activity必須繼承UnityPlayerActivity,unity才能通過
AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity"); jo.call("函數名")
或者
AndroidJavaClass jc = new AndroidJavaClass("包名+.主Activity");
jc.CallStatic("函數名");
unity調Android(一)中unity沒法調用android 本文主要解決調用問題:
實現思路是通過activity切換調用的方式。受益於 雨凇momo教程 。讓主activity繼承UnityPlayerActivity,然后在主activity里通過
Intent intent = new Intent(mContext,"子activity"+.class);
intent.putExtra("Activity", "Activity");
this.startActivity(intent);
以下主要實現代碼:
public class SDKDemo extends UnityPlayerActivity{ Context mContext=null; JoyActivity joyActivity; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mContext=this; Intent intent = new Intent(mContext,JoyActivity.class); intent.putExtra("JoyActivity", "JoyActivity"); this.startActivity(intent); } public void nativeInit() { Log.e("nativeInit","nativeInit Enter"); joyActivity=new JoyActivity(); joyActivity.nativeInit(); Log.e("nativeInit","nativeInit End"); } public class JoyActivity extends Activity { UnityPlayer unityPlayer; // UnityPlayer.init() should be called before attaching the view to a layout. // UnityPlayer.quit() should be the last thing called; it will terminate the process and not return. protected void onCreate (Bundle savedInstanceState) { super.onCreate(savedInstanceState); setTheme(android.R.style.Theme_NoTitleBar_Fullscreen); requestWindowFeature(Window.FEATURE_NO_TITLE); mUnityPlayer = new UnityPlayer(this); if (mUnityPlayer.getSettings ().getBoolean ("hide_status_bar", true)) getWindow ().setFlags (WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); int glesMode = mUnityPlayer.getSettings().getInt("gles_mode", 1); boolean trueColor8888 = false; mUnityPlayer.init(glesMode, trueColor8888); View playerView = mUnityPlayer.getView(); setContentView(playerView); playerView.requestFocus(); } 以上代碼 也可以參考 unity調android(一)中的方式 public void nativeInit () { Log.e("nativeInit", "##########################"); } unity代碼: void Start () { jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); jo = jc.GetStatic<AndroidJavaObject>("currentActivity"); jo.Call("nativeInit"); }