关于安卓和unity通信。

1.新建一个空的安卓工程,然后将unity目录下的Unity5.2.3\Editor\Data\PlaybackEngines\androidplayer\Variations\mono\Release\Classes\class.jar下的class.jar 放到安卓工程下的libs中,

注意将继承类改成UnityPlayerActivity,using unity的命名空间

2.eclipse 下的windows-pre-general -workpace 改为utf -8

3. mainxml 中  /intent-filter(主mainactivity) 下面加  <meta-data android:name="unityplayer.UnityActivity" android:value="true" />,否则unity导出报错。

如果另外声明了新类 需要在mainxml中添加 

 <activity              // application中。主main为游戏主main
       
            android:name=".OpenActivity1">          // .代表当前目录
        </activity> 

4.导出jar包,注意删除无用的东西,java-jar..

5. 我们新建一个Plugins文件夹,Plugins下面又建Android文件夹,Android文件夹下再建一个bin文件夹,我们将我 们导出的jar包放进这个文件夹下,然后我们在eclipse中的res文件复制一份放入Android。也要把AndroidManifest.xml 放进Android目录下,第三方libs下的也要全部弄过来,但是注意删除原来加入的classes.jar。避免冲突

Plugins/Android/bin
Plugins/Android/res
Plugins/AndroidManifest
Plugins/libs

6.调用

    AndroidJavaClass jc;
    AndroidJavaObject m_activity;

    void Start () {  
  
        jc = new AndroidJavaClass ("com.unity3d.player.UnityPlayer");  
        m_activity = jc.GetStatic<AndroidJavaObject> ("currentActivity");  
  
  
    }  
  
  
    void OnGUI(){  
        //call hello world  
        if(GUI.Button(new Rect(50,50,200,40),"Open Activity")){  
            m_activity.Call("StartActivity1","Unity中调出android的方法了");  //调用的主main中的startActivity函


数并且传参。
        } 
//有返回值 就写 call<返回值类型> 




// 如果有UI线程,最好如下写。 有时候安卓参数是act,就需要将getstatic的对象本身传进去。

        using (AndroidJavaClass jc = new AndroidJavaClass("com.unity3d.player.UnityPlayer"))
        {
            using (AndroidJavaObject jo = jc.GetStatic<AndroidJavaObject>("currentActivity"))
            {
                jo.Call("runOnUiThread", new AndroidJavaRunnable(() =>
                {
                    jo.Call("exit", jo);//参数是act的时候就写jo。
                }));
            }
        }

8,安卓回调unity通信,将主activity改成继承自unityplayer的,xml入口主函数改成自己写的。然后unityplayer sendmessage 就OK 。具体百度

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 在Unity中实现安卓USB串口通信相对来说比较复杂,我们需要使用Unity的JNI(Java Native Interface)来调用安卓系统底层的API实现串口通信。下面是一个大致的步骤: 首先,我们需要创建一个安卓插件,该插件会使用到Android的API来访问串口设备。我们可以使用Android Studio来创建一个新的Android Library项目,并在其中编写一个Java类,该类将使用到串口通信相关的API,如SerialPort、UsbManager等。 其次,我们需要将该插件导入到Unity项目中。在Unity的Assets文件夹中创建一个Plugins/Android文件夹,并将安卓插件的.aar文件(Android Archive Library)和.jar文件(Java Archive)复制到该文件夹中。 接下来,在Unity中编写C#脚本来调用安卓插件。我们可以使用UnityAndroidJavaClass和AndroidJavaObject类来调用插件中的方法,并实现串口通信的功能。在脚本中,我们可以通过调用Java类的构造函数来创建一个对象,并使用该对象调用相关的方法。 最后,我们可以在Unity中测试安卓USB串口通信功能。可以使用Unity的GUI元素(如按钮或文本框)来触发和显示串口通信的操作和结果。 需要注意的是,由于串口通信涉及到安卓系统底层的API,因此我们需要对相关的权限和配置进行配置。比如,在安卓清单文件中声明访问串口的权限,配置USB设备相关的参数等。 综上所述,实现Unity安卓USB串口通信需要编写安卓插件、调用插件方法的C#脚本,并进行一些安卓系统的配置。这样我们就能够在Unity中实现与USB串口设备的通信功能了。 ### 回答2: Unity是一种跨平台的游戏开发引擎,可以在多种操作系统和设备上创建游戏和应用程序。要在Unity中实现安卓USB串口通信,可以按照以下步骤进行: 1. 首先,需要在Unity中添加Android模块以支持Android设备。可以通过转到“File”->“Build Settings”->“Player Settings”并选择“Android”来完成此设置。 2. 接下来,需要使用Unity的C#脚本来实现USB串口通信。可以使用SerialPort类来打开、读取和写入USB串口。可以编写一个自定义脚本来处理串口通信逻辑。 3. 在Java层面,Unity允许通过JNI(Java Native Interface)来调用Android原生方法。可以在Unity的脚本中编写一个函数来与Java层进行交互。在Java层面,可以使用Android的USB相关API来访问USB串口。 4. 在Java层面,需要使用UsbManager类来获取和打开USB设备。可以使用UsbDeviceConnection和UsbEndpoint类来进行读写操作。需要检查连接状态、权限和传输设置等。 5. 在Unity的C#脚本中,可以使用AndroidJavaObject类和Call函数来调用Java层面的方法。通过调用Java层面的方法来发送和接收数据。 需要注意的是,USB串口通信涉及到Android的权限控制。在Unity中,可以在“Player Settings”->“Android Settings”->“Other Settings”中指定所需的权限,例如访问USB设备。 总而言之,要在Unity中实现安卓USB串口通信,需要进行Java层和Unity脚本的交互,并使用Android的USB相关API来实现串口读写操作。各个层面之间的数据传递可以通过JNI和Unity提供的方法实现。 ### 回答3: Unity是一款跨平台的游戏开发引擎,它也可以用来进行安卓设备的开发和通信。在Unity中与安卓设备的串口通信需要借助AndroidJavaObject类和Java层的代码来实现。 首先,我们需要在Unity中创建一个C#脚本,该脚本用于与Android端进行通信。可以通过AndroidJavaObject类来创建一个Java对象,该对象可以与Android层的代码进行交互。接着,我们需要在Java层的代码中编写与安卓设备串口通信相关的函数。 在Java层的代码中,我们可以使用Android的SerialPort类来进行串口通信。该类提供了与串口进行打开、关闭、读写等操作的方法。我们可以在Unity中调用Java层的代码来打开串口、发送数据、接收数据等。可以使用AndroidJavaClass类来访问Java层的类和方法。 在Unity中,我们可以通过调用Java层的方法来进行串口通信。例如,我们可以在Unity中调用Java代码来打开串口,代码示例如下: ```csharp // 创建一个AndroidJavaObject对象 AndroidJavaObject serialPortObject = new AndroidJavaObject("com.example.SerialPortHelper"); // 调用Java对象的打开串口方法 serialPortObject.Call("openSerialPort", "/dev/ttyUSB0", 9600); ``` 在Java层的代码中,我们需要实现打开串口的方法: ```java public static void openSerialPort(String port, int baudRate) { try { SerialPort serialPort = new SerialPort(new File(port), baudRate, 0); // 进行其他操作,例如设置数据位、停止位等 } catch (IOException e) { e.printStackTrace(); } } ``` 通过以上方式,我们可以在Unity中调用Java层的方法来进行串口通信。除了打开串口,我们还可以在Java层的代码中实现发送数据、接收数据等相关操作。通过这种方式,我们可以在Unity中与安卓设备进行串口通信

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

G11176593

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值