您的位置:首页 > 移动开发 > Unity3D

unity与原生android混合开发

2016-12-15 10:33 465 查看

一、unity导出android工程

1.打开unity软件 

    

2.选择File-->BuildSetting在弹出对话框里选择Android 并在右侧勾选Goolgle Android Project ,然后选择导出。

    


二、AS工程导入

打开AS选择File-->New-->Import Project

           


三、unity调用android原生方法

1、unity代码

         void Start()
         {
        jc = new AndroidJavaClass ("com.Xreal.TJYH.u3d");  //com.Xreal.TJYH.u3d-->android对应activity的全类名
        jo = jc.GetStatic<AndroidJavaObject> ("currentActivity");//currentActivity-->android对应activity的静态属性
         }
         void OnGUI()
         {
        if (GUI.Button(new Rect(50, 50, 200, 50), "StartRecording"))
        {
       jo.Call ("startRecording");//startRecording-->调用的android方法名
         }

         if (GUI.Button(new Rect(50, 150, 200, 50), "StopRecording"))
         {
       jo.Call ("stopRecording");//stopRecordin-->调用的android方法名
          }
          } 

  2、android代码

               public class u3d extends UnityPlayerActivity {

                     private static final int SHOW = 1;
                     private static final int CANCEL = 2;
             public static Context currentActivity  ;
             private Handler mHandler = new Handler() {

                          @Override

                           public void handleMessage(Message msg) {

                                     super.handleMessage(msg);

                                     switch (msg.what) {

                                             case SHOW:

                                                   if (isRecording){

                                                       Toast.makeText(u3d.this,"录制已开始",Toast.LENGTH_SHORT).show();

                                                   }else {

                                                       startScreenCapture();

                                                       isRecording = true;

                                                   }

                                           
4000
       break;

                                             case CANCEL:

                                                   if (isRecording){

                                                       mediaRecorder.stop();

                                                       mediaRecorder.reset();

                                                       mediaProjection.stop();

                                                       virtualDisplay.release();

                                                       isRecording = false;

                                                       insertVideoToMediaStore(getSaveDirectory()+videoName);

                                                       Toast.makeText(u3d.this,"录制结束",Toast.LENGTH_SHORT).show();

                                                   }else {

                                                       Toast.makeText(u3d.this,"没有开始录制",Toast.LENGTH_SHORT).show();

                                                   }

                                                   break;

                                         }

                         };
                @Override

                     protected void onCreate(Bundle savedInstanceState) {

                               super.onCreate(savedInstanceState);

                               setContentView(R.layout.activity_u3d);

                               currentActivity =this;
                }
                /**

                        * unity调用的方法,需要用一个handler进行处理实现功能,直接无法实现。

                        */

                       public void stopRecording() {

                             mHandler.sendEmptyMessage(CANCEL);

                       }

                        /**

                         * unity调用的方法,需要用一个handler进行处理实现功能,直接无法实现。

                         */

                        public void startRecording() {

                              mHandler.sendEmptyMessage(SHOW);

                        }

                  }

四、android原生调用unity方法

           1、android代码

                  private class MyBtnCameraOnClickListener implements View.OnClickListener {

                       @Override

                        public void onClick(View view) {

                            Intent intent = new Intent(MainActivity.this, u3d.class);

                            intent.putExtra("type","photo");

                            startActivity(intent);//启动unity界面

                        }

                  }

                  private class MyBtnCookOnClickListener implements View.OnClickListener {

                       @Override

                       public void onClick(View view) {

                             Intent intent = new Intent(MainActivity.this, u3d.class);

                             intent.putExtra("type","cook");

                             startActivity(intent);

                       }

                  }
                public class u3d extends UnityPlayerActivity {

                     @Override

                      protected void onCreate(Bundle savedInstanceState) {

                              super.onCreate(savedInstanceState);

                              setContentView(R.layout.activity_u3d);

                               Intent intent = getIntent();

                               String type = intent.getStringExtra("type");

                               Toast.makeText(u3d.this,type,Toast.LENGTH_SHORT).show();

                               if ("cook".equals(type)){

                                    UnityPlayer.UnitySendMessage("Cube","CallUnityFunction","cook");//unity方法

                               }else {

                                    UnityPlayer.UnitySendMessage("Cube","CallUnityFunction","photo");//unity方法

                               }

                 }

             2、unity代码

            

[插入]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: