【原】unity調Android(二)


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");
    }

 

 

 


免責聲明!

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



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