unity与原生android混合开发

本文详细介绍了如何在Unity中导出Android项目,并使用Android Studio进行导入。此外,还提供了Unity调用Android原生方法和Android调用Unity方法的具体示例代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、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;
                                                   }
                                                   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代码

             [插入]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值