From d38b44b8ac8143a787a97e1cf395ff9a6370ddf9 Mon Sep 17 00:00:00 2001 From: jackfiled Date: Fri, 10 Feb 2023 16:17:18 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8E=A5=E6=94=B6Udp=E6=95=B0=E6=8D=AE=20?= =?UTF-8?q?=E9=99=84=E8=B5=A03D=E7=AB=8B=E6=96=B9=E4=BD=93=E6=97=8B?= =?UTF-8?q?=E8=BD=AC=E4=B8=80=E5=B0=8F=E6=97=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Assets/CubeBehaviour.cs | 38 ++++++++++++++++++++++ Assets/CubeBehaviour.cs.meta | 11 +++++++ Assets/UdpListener.cs | 63 ++++++++++++++++++++++++++++++++++++ Assets/UdpListener.cs.meta | 3 ++ 4 files changed, 115 insertions(+) create mode 100644 Assets/CubeBehaviour.cs create mode 100644 Assets/CubeBehaviour.cs.meta create mode 100644 Assets/UdpListener.cs create mode 100644 Assets/UdpListener.cs.meta diff --git a/Assets/CubeBehaviour.cs b/Assets/CubeBehaviour.cs new file mode 100644 index 0000000..5388f67 --- /dev/null +++ b/Assets/CubeBehaviour.cs @@ -0,0 +1,38 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using Models; +using UnityEngine; + +public class CubeBehaviour : MonoBehaviour +{ + public Vector3 rotateAmount = new Vector3(0, 1, 0); + private readonly UdpListener _listener = new UdpListener(); + + // Start is called before the first frame update + private void Start() + { + _listener.AddHandler(LogLandmarks); + _listener.Connect(5000); + } + + // Update is called once per frame + private void Update() + { + transform.Rotate(rotateAmount); + } + + private void OnDisable() + { + _listener.DisConnect(); + } + + private static void LogLandmarks(List landmarks) + { + foreach (var landmark in landmarks) + { + Debug.Log(landmark.ToString()); + } + } +} diff --git a/Assets/CubeBehaviour.cs.meta b/Assets/CubeBehaviour.cs.meta new file mode 100644 index 0000000..bf7446b --- /dev/null +++ b/Assets/CubeBehaviour.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 11e8a976fe328b1c3bdf9f44ef9f6fa1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/UdpListener.cs b/Assets/UdpListener.cs new file mode 100644 index 0000000..13179ac --- /dev/null +++ b/Assets/UdpListener.cs @@ -0,0 +1,63 @@ +using System; +using System.Collections.Generic; +using System.Net; +using System.Net.Sockets; +using Models; + +public class UdpListener +{ + private UdpClient _client; + private IPEndPoint _endPoint; + private bool _isReceive; + private ReceiveHandler _handlers; + + /// + /// 开始监听指定的端口 + /// + /// 需要监听的端口号 + public void Connect(int port) + { + _endPoint = new IPEndPoint(IPAddress.Any, port); + _client = new UdpClient(_endPoint); + _isReceive = true; + + _client.BeginReceive(ReceiveCallback, null); + } + + /// + /// 停止监听 + /// + public void DisConnect() + { + _isReceive = false; + _client.Close(); + } + + /// + /// 添加处理收到事件的回调 + /// + /// + public void AddHandler(ReceiveHandler handler) + { + _handlers += handler; + } + + private void ReceiveCallback(IAsyncResult result) + { + if (_isReceive) + { + var bytes = _client.EndReceive(result, ref _endPoint); + + var landmarks = PoseLandmark.ArrayOf(bytes); + + _handlers(landmarks); + + _client.BeginReceive(ReceiveCallback, null); + } + } +} + +/// +/// 处理收到数据的回调函数 +/// +public delegate void ReceiveHandler(List landmarks); \ No newline at end of file diff --git a/Assets/UdpListener.cs.meta b/Assets/UdpListener.cs.meta new file mode 100644 index 0000000..5ef9cac --- /dev/null +++ b/Assets/UdpListener.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 0eea15b46d04475e8de7277ef64e39e0 +timeCreated: 1676014658 \ No newline at end of file