qwuwp 2025-02-02 21:42 采纳率: 16.7%
浏览 59

Unity串口通信发生报错

Unity中使用SerialPort发生报错:
串口初始化失败: System.IO.Ports is currently only supported on Windows.
UnityEngine.Debug:LogError (object)
系统是Windows没错的。
在常规的C#项目中却可以。
unity版本2022.3.13.f1c1。
网上方法改.NET框架什么的都试了,手动导入DLL,NugetForUnity导入,各种版本System.IO.Ports都试了一直不行。

  • 写回答

3条回答 默认 最新

  • 码农阿豪@新空间 新星创作者: 前端开发技术领域 2025-02-02 22:31
    关注
    让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言
    问题原因是Unity中的SerialPort库只支持Windows平台,而你的系统确实是Windows。可能导致这种问题的原因是Unity的版本可能不支持System.IO.Ports库。推荐尝试以下解决方式:
    1. 确保使用的是Unity官方推荐的System.IO.Ports库版本。
    2. 尝试在Unity编辑器中更换不同版本的.NET Framework。
    3. 确保你的项目配置使用正常的.NET Framework版本。
    4. 尝试使用其他通信方式,如UDP或TCP等,来代替SerialPort。 以下是使用UDP通信的简单示例代码:
    using System;
    using System.Net;
    using System.Net.Sockets;
    using System.Text;
    using UnityEngine;
    public class UDPController : MonoBehaviour
    {
        private UdpClient udpClient;
        private IPEndPoint endPoint;
        private void Start()
        {
            udpClient = new UdpClient();
            endPoint = new IPEndPoint(IPAddress.Parse("127.0.0.1"), 1234);
            // 发送数据
            string message = "Hello, UDP!";
            byte[] messageBytes = Encoding.UTF8.GetBytes(message);
            udpClient.Send(messageBytes, messageBytes.Length, endPoint);
            // 接收数据
            udpClient.BeginReceive(ReceiveCallback, null);
        }
        private void ReceiveCallback(IAsyncResult ar)
        {
            byte[] receivedBytes = udpClient.EndReceive(ar, ref endPoint);
            string receivedMessage = Encoding.UTF8.GetString(receivedBytes);
            Debug.Log("Received message: " + receivedMessage);
            // 继续接收数据
            udpClient.BeginReceive(ReceiveCallback, null);
        }
        private void OnDestroy()
        {
            udpClient.Close();
        }
    }
    

    以上代码是使用UDP进行数据通信的简单示例,可以替代SerialPort进行数据传输。希望能帮到你解决问题。

    评论

报告相同问题?

问题事件

  • 创建了问题 2月2日