Unity使用UDP接收数据

这篇具有很好参考价值的文章主要介绍了Unity使用UDP接收数据。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在雷达互动系统中,由于硬件问题,程序容易误触,为了解决这个问题,通过UDP传送协议控制程序部分功能。例如:中控(平板)发送1,在程序中视频1播放,中控(平板)发送2,程序中视频2播放。

  1. 网络调试助手的下载

链接:https://pan.baidu.com/s/1Vvs6HfmFrPEUn1gKVULymg?pwd=jl98

提取码:jl98

  1. 设置本地主机地址和端口,远程主机的地址和串口号

unity接收udp数据,unity,udp,游戏引擎,Powered by 金山文档

(1)一台主机测试时(自己电脑测试):

上方框中

第一个先选UDP

第二个框中输入本机主机地址,就是电脑的ip地址(按win+R调出一个窗口,输入CMD,然后在弹出的框中输入ipconfig,出现的内容中,ipv4地址就是本机的ip地址)

第三个框中就是端口号,端口号是4位,可以输入未被占用的任意四位,例如:8800,8080。

设置完成后,通过点击开启按钮就可以打开端口(图片是打开后的状态,只有打开后才会显示下方框中的内容)

下方框中

就是需要控制的主机的ip和端口号,由于是一台电脑,所以主机的ip是一样的,“:”后面是端口号,端口号是在程序中显示的未被占用的端口号,本案例中是1180。

通过发送不同的数据,在程序中把需要接收的数据写进去,然后再写相对应的方法即可。

(2)两台主机控制时

由于我们是接收方,所以上方框中的内容不需要知道,开启后,将电脑的ip号和端口号传给发送方即可。

  1. 程序代码

ServerControl

using System.Collections.Generic;
using UnityEngine.UI;
using UnityEngine;
using UnityEngine.Video;

/// <summary>
/// 服务接收生成
/// </summary>
public class ServerControl : MonoBehaviour
{
    //public Transform prefab;
    public InputField field;
    public Button btn;
    public GameObject part1Root;
    public GameObject part2Root;
    void Start()
    {
        if (field.text != string.Empty)
        {
            UdpManager.InitializeUdpClient(int.Parse(field.text));
        }
        part1Root.SetActive(true);
        part2Root.SetActive(false);
    }
    void Update()
    {
        #region 1.0
        //if (UdpManager.m_receivedMessage != null)
        //{
        //    string[] msgArr = UdpManager.m_receivedMessage.Split('_');
        //    Debug.Log(msgArr[0]);
        //    if (msgArr.Length > 0)
        //    {
        //        //创建预设体
        //        Transform obj = Instantiate(PrefabList[int.Parse(msgArr[0])], parent);
        //        obj.gameObject.SetActive(true);
        //        Debug.Log("创建");
        //    }
        //    UdpManager.m_receivedMessage = null;
        //}
        #endregion

        #region 2.0
        if (UdpManager.m_receivedMessage != null)
        {
            string[] array = UdpManager.m_receivedMessage.Split(',');
            Debug.Log(UdpManager.m_receivedMessage);
            if (UdpManager.m_receivedMessage=="1")
            {
                part1Root.SetActive(true);
                part2Root.SetActive(false);
            }

            if (UdpManager.m_receivedMessage == "2")
            {
                part1Root.SetActive(false);
                part2Root.SetActive(true);
            }
            UdpManager.m_receivedMessage = null;
            //if (UdpManager.m_receivedMessage != null)
            //{
            //    //创建预设体
            //    transform.eulerAngles = new Vector3(float.Parse(array[0]), float.Parse(array[1]), float.Parse(array[2]));
            //}
            //UdpManager.m_receivedMessage = null;
        }
        #endregion



    }

    private void OnDestroy()
    {
        UdpManager.Close();
    }
}

其中端口号也可以设置外部加载,本系统中设置的是在程序中修改

UdpManager

using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading;
using UnityEngine;
using UnityEngine.Video;

public class UdpManager
{
    public static string m_receivedMessage;
    static IPEndPoint m_IPEndPoint;
    static UdpClient m_udpClient;


    public static void InitializeUdpClient(int Prot)
    {
        m_IPEndPoint = new IPEndPoint(IPAddress.Any, Prot);
        m_udpClient = new UdpClient(m_IPEndPoint);
        UdpModel s = new UdpModel(m_udpClient, m_IPEndPoint);
        m_udpClient.BeginReceive(EndReceive, s);
        Debug.Log("服务器启动");

    }

    //结束得到的信息
    private static void EndReceive(IAsyncResult ar)
    {
        try
        {
            UdpModel m_UdpModel = ar.AsyncState as UdpModel;
            if (m_UdpModel != null)
            {
                UdpClient udpClient = m_UdpModel.m_udpclient;
                IPEndPoint ip = m_UdpModel.m_ip;
                Byte[] receiveBytes = udpClient.EndReceive(ar, ref ip);
                string msg = Encoding.UTF8.GetString(receiveBytes);
                m_receivedMessage = msg;
                udpClient.BeginReceive(EndReceive, m_UdpModel); //开始获取

            }
        }
        catch (Exception ex)
        {
            //处理异常
        }
    }

    //udp模型
    private class UdpModel
    {
        public UdpClient m_udpclient = null;
        public IPEndPoint m_ip;
        public UdpModel(UdpClient udpclient, IPEndPoint ip)
        {
            this.m_udpclient = udpclient;
            this.m_ip = ip;
        }
    }

    //关闭
    public static void Close()
    {
        if (m_udpClient != null)
        {
            m_udpClient.Close();
            m_udpClient = null;
        }
    }

    /// <summary>
    /// 发送数据
    /// </summary>
    /// <param name="obj"></param>
    public static void SendMessage(string message)
    {
        UdpClient myUdpClient = new UdpClient();
        IPEndPoint endpoint;
        //当前服务器ip和端口号
        myUdpClient = new UdpClient(new IPEndPoint(IPAddress.Any, 8800));

        //要发送给的地址和端口号,255.255.255.255表示在这个局域网的所有ip
        endpoint = new IPEndPoint(IPAddress.Parse("192.168.31.174"), 1180);

        byte[] bytes = Encoding.UTF8.GetBytes(message);
        try
        {
            myUdpClient.Send(bytes, bytes.Length, endpoint);
            myUdpClient.Close();
        }
        catch (Exception err)
        {
            Console.Write(err.Message, "发送失败");
        }
        finally
        {
            myUdpClient.Close();
        }
    }
}
  1. 自我测试控制程序

unity接收udp数据,unity,udp,游戏引擎,Powered by 金山文档

脚本挂载在摄像机上,开启程序,设置网络调试助手下方的ip和端口号,发送数据1时,播放视频1,发送数据2时,播放视频2。文章来源地址https://www.toymoban.com/news/detail-582728.html

unity接收udp数据,unity,udp,游戏引擎,Powered by 金山文档

到了这里,关于Unity使用UDP接收数据的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Netty接收UDP组播数据

    针对多网卡情况,绑定其中的一个网卡,接收UDP组播中的数据。

    2024年02月16日
    浏览(30)
  • 使用团结引擎开发Unity 3D射击游戏

           本案例是初级案例,意在引导想使用unity的初级开发者能较快的入门,体验unity开发的方便性和简易性能。       本次我们将使用团结引擎进行开发,帮助想体验团结引擎的入门开发者进行较快的环境熟悉。      本游戏是一个俯视角度的射击游戏。主角始终位于屏幕

    2024年01月19日
    浏览(52)
  • 网络编程-UDP协议(发送数据和接收数据)

    需要了解TCP协议的,可以看往期文章 https://blog.csdn.net/weixin_43860634/article/details/133274701 通过此图,可以了解UDP所在哪一层级中 发送数据 接收数据 运行效果 1、 UDP是面向无连接通信协议 (通俗一点讲,就是不管是否已连接成功,直接发送数据),该特性正好与TCP协议相反,

    2024年02月07日
    浏览(28)
  • Unity简单的UDP通信

    UDP通信的优势在于不要求对方强制在线,没有因为网络连接不顺畅或连接失败导致的卡顿问题;缺点也是因为不能判断对方是否在线,导致整个连接不可靠,需要通过自定义代码来进行反馈。 下列代码就是一个简单的UDP通信基类,继承此类后,需调用 InitSocket 方法初始化才可

    2024年02月11日
    浏览(23)
  • Unity实现网络通信(UDP)

    UDP通信特点:         无连接,多对多         不可靠         面向数据报         效率高 UDP中的分包与黏包 分包:一段数据被分为两段或多段传输,在UDP通信方式中,因为UDP的不可靠性无法保证有序传输,因此尽量避免UDP自动分包。         其中一种方式是保证消

    2024年02月04日
    浏览(31)
  • 利用c++基于ffmpeg库接收rtsp视频数据,并利用udp将以RTP协议将数据发送,同时利用udp接收RTP数据包,并基于ffmpeg库播放视频。

    这是两个不同的任务,需要分别实现。 任务一:基于ffmpeg库接收rtsp视频数据,并利用udp将以RTP协议将数据发送。 以下是基于ffmpeg库接收rtsp视频数据,然后使用udp发送RTP协议数据的示例代码: 任务二:利用c++利用udp接收RTP数据包,并基于ffmpeg库播放视频。 以下是利用c++利用

    2024年02月12日
    浏览(33)
  • Linux 下 nc 发送接收 udp、tcp数据

    nc,全名叫 netcat,它可以用来完成很多的网络功能,譬如端口扫描、建立TCP/UDP连接,数据传输、网络调试等等,因此,它也常被称为网络工具的 瑞士军刀 。 一、只服务端使用nc 备注:这种方式只能发送一次数据,不能互相发送 1、udp发送接收数据,udp本质不区分客户端服务

    2024年02月16日
    浏览(32)
  • 【Unity】网络通信(TCP&UDP)

    Unity/C#要想和其他电脑或者软件程序通讯,最好的方式是通过网络进行通讯,下面简要介绍以下其原理和实现: TCP和UDP是传输层协议,使用IP协议从一个网络传送数据包到另一个网络。把IP想像成一种高速公路,它允许其它协议在上面行驶并找到到其它电脑的出口。 两者的不

    2024年01月16日
    浏览(38)
  • Python启动UDP服务,监听并接收客户端数据

    可以使用Python的socket库实现UDP协议的验证,以下是一个简单的示例代码: 服务器: 客户端 以上代码创建了一个UDP socket,并绑定到本地的IP和端口8888。接着使用 recvfrom() 方法接收数据,并使用 sendto() 方法发送数据。最后,关闭socket。 可以使用两个终端分别运行该程序,并观

    2024年02月15日
    浏览(37)
  • ESP32网络开发实例-UDP数据发送与接收

    本文将详细介绍在Arduino开发环境中,如何实现ESP32通过UDP协议进行数据发送与接收。 用户数据报协议 (UDP) 是一种跨互联网使用的通信协议,用于对时间敏感的传输,例如视频播放或 DNS 查找。它通过在数据传输之前不正式建立连接来加速通信。这使得数据可以非常快速地传输

    2024年02月07日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包