一、相关软件
1、虚拟串口模拟器:vspn
下载链接:vspd.zip_免费高速下载|百度网盘-分享无限制
下好之后,可以直接安装英文版vspd.exe,也可以选择Cracked文件夹中的已汉化好的版本直接使用vspdconfig.exe
注意:这个软件的使用期限,只有14天的免费使用时间,14天后不注册,软件就打不开了
使用方法:打开软件之后点击Add pair就可以直接增加虚拟串口了。然后不需要的时候就把串口删除就行(串口打开之后,在后面会显示[9600-N-8-1],如COM3后面的显示)
2、ATK串口调试助手
下载链接:https://pan.baidu.com/s/1WE85obmk93zntQiuv59ehA
提取码:fdvw
使用方法:先点击上面红色框中的内容选择串口,这里选择的是COM3向COM2发送消息,因为在unity里面打开的COM2,COM2被占用,所以是这串口调试助手中打开了COM3,点击
由黄色框中可见,是COM3接收的内容。
COM2->COM3发送了两条消息,都是“12345”,这个是验证unity的串口是否打开的。
由蓝色框中可见,是COM3发送的内容。
是COM3->COM2发送的消息,在这发送消息,在unity中做对应的相应,例如,发送2的话就是播放视频,在unity中视频就会播放
下载完这两个软件之后,就可以实现不用硬件,只需要一台电脑就能实现unity的串口通信了。
二:unity的设置
代码的书写原文链接:http://t.csdn.cn/lUrd2(他前面写的那堆我也没看懂,就直接把全部的代码复制进来,然后再根据自己的需求进行修改)我这边做的是一个通过串口控制制作一个视频播放器
VideoController(视频控制器)
using RenderHeads.Media.AVProVideo;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using UnityEngine;
using UnityEngine.UI;
/// <summary>
/// 视频控制器
/// </summary>
public class VideoController : MonoBehaviour
{
public GameObject VideoRoot; //video的root界面
public GameObject BGRoot; //BG的root界面
//持有控制视频播放的组件
public MediaPlayer mediaPlayer;
public MediaPlayer BGMediaPlayer; //背景视频的mp
//背景界面的显示
public GameObject bgVideoUI; //背景视频的ui
public Image bgImg; //背景图片的ui
public Image maskImg; //遮罩的ui
[Header("视频名称")]
public string[] VideoNames;
public List<Sprite> imageList = new List<Sprite>(); //加载的图片的列表
public List<Sprite> maskImageList = new List<Sprite>(); //加载的图片的列表
static VideoController instance;
TestPort testPort;
public static VideoController GetInstance()
{
return instance;
}
//初始化
void Awake()
{
instance = this;
//视频名称的路径
VideoNames = File.ReadAllLines(Application.streamingAssetsPath + "/Video/videoName.txt");
//注册视频播放触发事件
mediaPlayer.Events.AddListener(MediaEventHandler);
//加载图片,加载遮罩图片
LoadAllPic();
LoadMaskPic();
LoadVideo(0,false);
testPort = new TestPort();
}
// 视频播放时间触发
private void MediaEventHandler(MediaPlayer arg0, MediaPlayerEvent.EventType arg1, ErrorCode arg2)
{
switch (arg1)
{
case MediaPlayerEvent.EventType.Closing:
break;
case MediaPlayerEvent.EventType.Error:
break;
case MediaPlayerEvent.EventType.FinishedPlaying://注意:如果视频设置为循环播放模式,则不触发此项
Debug.Log("播放完触发");
//视频播放完的事件
ListLoop();
FinishShowBlack();
ShowFirst();
ShowBGImg();
ShowBgVideo();
break;
case MediaPlayerEvent.EventType.FirstFrameReady:
break;
case MediaPlayerEvent.EventType.MetaDataReady:
break;
case MediaPlayerEvent.EventType.ReadyToPlay:
break;
case MediaPlayerEvent.EventType.Started://注意:每暂停之后的开始播放都会触发一次
Debug.Log("开始播放触发");
break;
default:
break;
}
}
void Start ()
{
//默认界面显示
BGRoot.SetActive(false);
VideoRoot.SetActive(true);
//默认不显示遮罩
//DisShowMask();
}
#region 视频加载,内容视频和背景视频
// 加载视频方法
int index = 0;
public int Index { get => index; set => index = value; }
public void LoadVideo(int index,bool isPlay)
{
if (index>=VideoNames.Length)
{
index = 0;
}
//通过插件中的方法加载(参数为:1.加载路径格式(与面板上相对应)2.加载的文件名 3.默认是否开始播放)
mediaPlayer.OpenVideoFromFile(MediaPlayer.FileLocation.RelativeToStreamingAssetsFolder, "Video/"+ VideoNames[index] + ".mp4", isPlay);
BGMediaPlayer.OpenVideoFromFile(MediaPlayer.FileLocation.RelativeToStreamingAssetsFolder, "bgContent/bg.mp4", false);
}
#endregion
#region 视频切换
// 下一个视频
public void NextVideo()
{
index++;
if (index > VideoNames.Length - 1)
index = 0;
//视频播放
LoadVideo(index,true);
}
public void NextVideoCK(int _index)
{
//testPort.IsClick = isClick;
index = _index;
index++;
if (index >= VideoNames.Length )
index = 0;
}
// 上一个视频
public void LastVideo()
{
index--;
if (index < 0)
index = VideoNames.Length - 1;
//视频播放
LoadVideo(index,true);
}
public void LastVideoCK(int _index)
{
index = _index;
index--;
if (index < 0)
index = VideoNames.Length - 1;
}
#endregion
#region 视频播放、暂停、循环
// 播放与暂停开关点击触发
public void DoPlayOrPause(bool s_isOn)
{
if (VideoRoot.activeSelf)
{
if (s_isOn)
{
//通过持有的MediaPlayer类进行操控
mediaPlayer.Control.Play();
}
else
{
mediaPlayer.Control.Pause();
}
}
}
public void DoPlay(bool s_isOn)
{
if (s_isOn)
{
//通过持有的MediaPlayer类进行操控
mediaPlayer.Control.Play();
}
else
{
mediaPlayer.Control.Pause();
}
}
//重播
public void Restart()
{
mediaPlayer.Control.Rewind();
}
// 是否循环播放开关点击触发
public void DoSetLoop(bool s_isOn)
{
//通过持有的MediaPlayer类进行操控
mediaPlayer.Control.SetLooping(s_isOn);
}
public bool isListLoop = false; //是否列表播放
public void ListLoop()
{
if (isListLoop)
{
NextVideo();
mediaPlayer.Play();
Debug.Log(111);
}
}
#endregion
#region 倍速
// 改变播放速度方法(正的加速放映,负的倒放映)
public void DoChangeSpeed(int s_speed)//下拉列表对应索引值
{
float tSpeed = 1;
switch (s_speed)
{
case 0:
tSpeed = 2;
break;
case 1:
tSpeed = 1.5f;
break;
case 2:
tSpeed = 1;
break;
case 3:
tSpeed = 0.5f;
break;
default :
Debug.Assert(false);
break;
}
mediaPlayer.Control.SetPlaybackRate(tSpeed);
}
#endregion
#region 进度条
// 时刻更新视频进度到滑动条上
void DoUpdateVideoProcess()
{
//获取当前播放时长
float tCurrentTime = mediaPlayer.Control.GetCurrentTimeMs();
//获取视频总长度
float tVideoTime = mediaPlayer.Info.GetDurationMs();
//计算出对应的播放进度赋值给显示播放进度的进度条
//m_processSlider.value = tCurrentTime/tVideoTime;
}
int tCurrentMin;
int tCurrentSeconds;
int tVideoTimeMin;
string tVideoTimeSecondStr;
// 更新播放进度的时间显示
void UpdateTimeText()
{
//对当前播放时间转换时间格式
//转化为 秒
tCurrentSeconds = (int)mediaPlayer.Control.GetCurrentTimeMs()/1000;
//获取当前分数
tCurrentMin = tCurrentSeconds/60;
//重新赋值剩余多少秒
tCurrentSeconds = tCurrentSeconds%60;
string tCurrentSecondStr = tCurrentSeconds < 10 ? "0" + tCurrentSeconds : tCurrentSeconds.ToString();
//对总时间转化时间格式
//转化为秒
int tVideoTimeSeconds = (int) mediaPlayer.Info.GetDurationMs()/1000;
//获取总的分数
tVideoTimeMin = tVideoTimeSeconds/60;
//重新复制剩余多少秒
tVideoTimeSeconds = tVideoTimeSeconds%60;
tVideoTimeSecondStr = tVideoTimeSeconds < 10 ? "0" + tVideoTimeSeconds : tVideoTimeSeconds.ToString();
//拼接一下时间显示字符串
string tTime = string.Format("<color=write>{0}:{1}/{2}:{3}</color>", tCurrentMin, tCurrentSecondStr, tVideoTimeMin, tVideoTimeSecondStr);
//m_videoTimeTex.text = tTime;
}
// 视频播放进度条值改变触发
void OnProcessSliderChange(float value)
{
//获取视频总长度
float tVideoTime = mediaPlayer.Info.GetDurationMs();
//当前视频的时间
// //float tCurrentTime = m_processSlider.value*tVideoTime;
// //将视频时间调到对应的节点
// mediaPlayer.Control.Seek(tCurrentTime);
//m_processSlider.transform.Find("Fill Area").Find("Fill").GetComponent<RectTransform>().anchoredPosition = new Vector2(0, 0);
//m_processSlider.transform.Find("Handle Slide Area").Find("Handle").GetComponent<RectTransform>().anchoredPosition = new Vector2(0, 0);
}
// 播放进度条开始拖动触发(EventTrigger触发)
public void OnProcessSliderDragBegin()
{
//暂停播放
mediaPlayer.Control.Pause();
}
// 播放进度条结束拖动触发(EventTrigger触发)
public void OnProcessSliderDragEnd()
{
//开始播放
mediaPlayer.Control.Play();
}
#endregion
#region 音量设置
//音量加减
float value = 1f;
public void VolumeAdd(float change)
{
value+=(change/100);
if (value>=1)
value = 1;
mediaPlayer.Control.SetVolume(value);
}
public void VolumeSub(float change)
{
value -= (change / 100);
if (value <= 0)
value = 0;
mediaPlayer.Control.SetVolume(value);
}
// 静音
public void Mute()
{
mediaPlayer.Control.SetVolume(0);
}
//取消静音
public void CanelMute()
{
mediaPlayer.Control.SetVolume(value);
}
#endregion
#region 开启和关闭视频
//视频开启时,视频的Root开启,背景的Root关闭,背景视频停止播放
public void OpenVideo()
{
VideoRoot.SetActive(true);
BGRoot.SetActive(false);
BGMediaPlayer.Pause();
iSshowBlack = false;
IsShowBGImg = false;
IsShowFirst = false;
}
//关闭视频,显示黑屏
public void CloseVideo1()
{
//界面的显示
VideoRoot.SetActive(false);
BGRoot.SetActive(true);
mediaPlayer.Stop();
bgImg.color = Color.black;
BGMediaPlayer.Stop();
}
//关闭视频,显示背景视频
public void CloseVideo2()
{
//界面的显示
VideoRoot.SetActive(false);
BGRoot.SetActive(true);
mediaPlayer.Stop();
bgImg.gameObject.SetActive(false);
BGMediaPlayer.Play();
}
public void CloseVideo3()
{
//界面的显示
VideoRoot.SetActive(false);
BGRoot.SetActive(true);
mediaPlayer.Stop();
bgImg.gameObject.SetActive(true);
bgImg.color = Color.white;
bgImg.sprite = imageList[0];
//背景视频停止播放
BGMediaPlayer.Stop();
}
#endregion
#region 视频播放完之后
public bool iSshowBlack = false; //播放完毕是否显示黑屏
//播放完之后显示黑屏
public void FinishShowBlack()
{
if (iSshowBlack)
{
//界面切换
VideoRoot.SetActive(false);
BGRoot.SetActive(true);
bgImg.color = Color.black;
BGMediaPlayer.Stop();
}
}
public bool IsShowFirst; //播放完毕是否显示第一帧
public void ShowFirst()
{
if (IsShowFirst)
{
//界面切换
VideoRoot.SetActive(false);
BGRoot.SetActive(true);
Texture2D texture2D = new Texture2D(1920, 1080);
mediaPlayer.ExtractFrame(texture2D, 0);
Sprite sprite = Sprite.Create(texture2D, new Rect(0, 0, texture2D.width, texture2D.height), new Vector2(-500, -500));
bgImg.color = Color.white;
bgImg.sprite = sprite;
BGMediaPlayer.Stop();
}
}
public bool IsShowBGImg = false;
void ShowBGImg()
{
if (IsShowBGImg)
{
VideoRoot.SetActive(false);
BGRoot.SetActive(true);
mediaPlayer.Stop();
bgImg.gameObject.SetActive(true);
bgImg.color = Color.white;
bgImg.sprite = imageList[0];
BGMediaPlayer.Stop();
}
}
public bool IsShowBGVideo = false;
void ShowBgVideo()
{
if (IsShowBGVideo)
{
VideoRoot.SetActive(false);
BGRoot.SetActive(true);
mediaPlayer.Stop();
bgImg.gameObject.SetActive(false);
BGMediaPlayer.Play();
}
}
#endregion
#region 显示和隐藏遮罩
public void ShowMask()
{
if (maskImageList.Count <= 0)
{
maskImg.sprite = null;
Debug.Log("没有遮罩");
maskImg.gameObject.SetActive(false);
}
else
{
maskImg.sprite = maskImageList[0];
maskImg.gameObject.SetActive(true);
}
}
public void DisShowMask()
{
maskImg.gameObject.SetActive(false);
}
#endregion
#region 外部加载背景图片
void LoadAllPic()
{
//从StreamingAssets中加载图片
string imgtype = "*.BMP|*.JPG|*.GIF|*.PNG|*.JPEG";
string[] ImageType = imgtype.Split('|');
for (int k = 0; k < ImageType.Length; k++)
{
//获取streamingAssets文件夹下所有的图片路径
string[] dirs = Directory.GetFiles(Application.streamingAssetsPath+"/bgContent", ImageType[k]);
for (int j = 0; j < dirs.Length; j++)
{
Texture2D tx = new Texture2D(100, 100);
tx.LoadImage(getImageByte(dirs[j]));
Sprite sprite = Sprite.Create(tx, new Rect(0, 0, tx.width, tx.height), new Vector2(-500, -500));
sprite.name = Path.GetFileNameWithoutExtension(dirs[j]);
//将获取的图片加到图片列表中
imageList.Add(sprite);
}
}
}
void LoadMaskPic()
{
//从StreamingAssets中加载图片
string imgtype = "*.BMP|*.JPG|*.GIF|*.PNG|*.JPEG";
string[] ImageType = imgtype.Split('|');
for (int k = 0; k < ImageType.Length; k++)
{
//获取streamingAssets文件夹下所有的图片路径
string[] dirs = Directory.GetFiles(Application.streamingAssetsPath + "/mask", ImageType[k]);
for (int j = 0; j < dirs.Length; j++)
{
Texture2D tx = new Texture2D(100, 100);
tx.LoadImage(getImageByte(dirs[j]));
Sprite sprite = Sprite.Create(tx, new Rect(0, 0, tx.width, tx.height), new Vector2(-500, -500));
sprite.name = Path.GetFileNameWithoutExtension(dirs[j]);
//将获取的图片加到图片列表中
maskImageList.Add(sprite);
}
}
}
private static byte[] getImageByte(string imagePath)
{
FileStream files = new FileStream(imagePath, FileMode.Open);
byte[] imgByte = new byte[files.Length];
files.Read(imgByte, 0, imgByte.Length);
files.Close();
return imgByte;
}
#endregion
}
PortVideo(串口控制器)
using System.Collections;
using System.Collections.Generic;
using System.IO.Ports;
using UnityEngine;
/// <summary>
/// 串口控制器
/// </summary>
public class PortVideo : MonoBehaviour
{
PortManagerTest portManagerTest;
// Start is called before the first frame update
void Start()
{
portManagerTest = new PortManagerTest();
string[] portArray = portManagerTest.ScanPorts_TryFail();//使用试错函数,可以解决COM被占用问题
//遍历场景中的所有串口号并输出
foreach (string port in portArray)
{
Debug.Log(port);
}
portManagerTest.OpenSerialPort(portArray[0], 9600, Parity.None, 8, StopBits.None);
//发送数据
portManagerTest.SendData("12345");
}
// Update is called once per frame
void Update()
{
switch (portManagerTest.Num)
{
#region 视频部分
//播放 暂停
case 2:
if (!VideoController.GetInstance().VideoRoot.activeSelf)
VideoController.GetInstance().OpenVideo();
break;
case 3:
VideoController.GetInstance().DoPlayOrPause(false);
break;
//视频关闭
case 4:
case 5:
case 6:
if (ConfigFile.LoadString("closeVideo") == "1")
VideoController.GetInstance().CloseVideo1();
if (ConfigFile.LoadString("closeVideo") == "2")
VideoController.GetInstance().CloseVideo2();
if (ConfigFile.LoadString("closeVideo") == "3")
VideoController.GetInstance().CloseVideo3();
break;
//视频切换,上一个,下一个
case 13:
case 14:
if (!VideoController.GetInstance().VideoRoot.activeSelf)
VideoController.GetInstance().OpenVideo();
VideoController.GetInstance().LoadVideo(VideoController.GetInstance().Index, true);
break;
最小化视频,最大化视频
//case 15:
// MinOrMaxPanel.MinWin();
// break;
//case 16:
// MinOrMaxPanel.MaxWin();
// break;
//音量加减在portManagerTest线程接受里面
//静音和取消静音
case 23:
VideoController.GetInstance().Mute();
break;
case 24:
VideoController.GetInstance().CanelMute();
break;
default:
//循环
if (ConfigFile.LoadString("loop") == "1")
VideoController.GetInstance().DoSetLoop(true);
else if (ConfigFile.LoadString("loop") == "2")
VideoController.GetInstance().isListLoop = true;
else if (ConfigFile.LoadString("loop") == "3")
{
VideoController.GetInstance().DoSetLoop(false);
VideoController.GetInstance().isListLoop = false;
}
//视频播放完
if (ConfigFile.LoadString("finish") == "1" && ConfigFile.LoadString("loop") == "3")
VideoController.GetInstance().iSshowBlack = true;
if (ConfigFile.LoadString("finish") == "4" && ConfigFile.LoadString("loop") == "3")
VideoController.GetInstance().IsShowFirst = true;
if (ConfigFile.LoadString("finish") == "3" && ConfigFile.LoadString("loop") == "3")
VideoController.GetInstance().IsShowBGImg = true;
if (ConfigFile.LoadString("finish") == "2" && ConfigFile.LoadString("loop") == "3")
VideoController.GetInstance().IsShowBGVideo = true;
//是否显示遮罩
if (ConfigFile.LoadString("showMask") == "1")
VideoController.GetInstance().ShowMask();
if (ConfigFile.LoadString("showMask") == "2")
VideoController.GetInstance().DisShowMask();
break;
}
for (int i = 0; i < VideoController.GetInstance().VideoNames.Length; i++)
{
if (portManagerTest.Num == i + 51)
{
ShowWhereVideo(i);
}
}
#endregion
portManagerTest.Num = 0;
}
void OnApplicationQuit()
{
portManagerTest.CloseSerialPort(); //关闭串口
}
void ShowWhereVideo(int index)
{
if (!VideoController.GetInstance().VideoRoot.activeSelf)
VideoController.GetInstance().OpenVideo();
VideoController.GetInstance().LoadVideo(index, true);
VideoController.GetInstance().Index = index;
}
}
PortManagerTest(串口管理器)
using Microsoft.Win32;
using System;
using System.Collections.Generic;
using System.IO.Ports;
using System.Text;
using System.Threading;
using UnityEngine;
/// <summary>
/// 串口管理器
/// </summary>
public class PortManagerTest
{
private SerialPort sp;
#region 扫描端口
//使用API扫描
public string[] ScanPorts_API()
{
string[] portList = SerialPort.GetPortNames();
return portList;
}
//使用注册表信息扫描
public string[] ScanPorts_Regedit()
{
RegistryKey keyCom = Registry.LocalMachine.OpenSubKey("Hardware\\DeviceMap\\SerialComm");
string[] SubKeys = keyCom.GetValueNames();
string[] portList = new string[SubKeys.Length];
for (int i = 0; i < SubKeys.Length; i++)
{
portList[i] = (string)keyCom.GetValue(SubKeys[i]);
}
return portList;
}
//试错方式扫描
public string[] ScanPorts_TryFail()
{
List<string> tempPost = new List<string>();
bool mark = false;
for (int i = 0; i < 10; i++)
{
try
{
SerialPort sp = new SerialPort("COM" + (i + 1).ToString());
sp.Open();
sp.Close();
tempPost.Add("COM" + (i + 1).ToString());
mark = true;
}
catch (System.Exception)
{
continue;
}
}
if (mark)
{
string[] portList = tempPost.ToArray();
return portList;
}
else
{
return null;
}
}
#endregion
#region 打开串口/关闭串口
/// <summary>
/// 打开串口
/// </summary>
/// <param name="_portName">端口号</param>
/// <param name="_baudRate">波特率</param>
/// <param name="_parity">校验位</param>
/// <param name="dataBits">数据位</param>
/// <param name="_stopbits">停止位</param>
public void OpenSerialPort(string _portName, int _baudRate, Parity _parity, int dataBits, StopBits _stopbits)
{
try
{
sp = new SerialPort(_portName, _baudRate, _parity, dataBits, _stopbits);//绑定端口
sp.Open();
//使用委托
//sp.DataReceived += DataReceived;
//使用线程
Thread thread = new Thread(new ThreadStart(DataReceived));
thread.Start();
}
catch (Exception ex)
{
sp = new SerialPort();
Debug.Log(ex);
}
}
/// <summary>
/// 关闭串口
/// </summary>
public void CloseSerialPort()
{
try
{
sp.Close();
sp.Dispose();
Debug.Log("关闭端口");
}
catch (Exception e)
{
Debug.Log(e.Message);
}
}
#endregion
#region 发送数据
/// <summary>
/// 发送数据
/// </summary>
/// <param name="_info">string数据</param>
public void SendData(string _info)
{
try
{
if (sp.IsOpen)
{
sp.WriteLine(_info);
}
else
{
sp.Open();
sp.WriteLine(_info);
}
}
catch (Exception ex)
{
Debug.Log(ex);
}
}
/// <summary>
/// 发送数据
/// </summary>
/// <param name="send">byte数据</param>
/// <param name="offSet">起始位</param>
/// <param name="count">byte长度</param>
public void SendData(byte[] send, int offSet, int count)
{
try
{
if (sp.IsOpen)
{
sp.Write(send, offSet, count);
}
else
{
sp.Open();
sp.Write(send, offSet, count);
}
}
catch (Exception ex)
{
Debug.Log(ex);
}
}
#endregion
#region 接收数据
/// <summary>
/// 接收数据 回调函数
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
public void DataReceived(object sender, SerialDataReceivedEventArgs e)
{
byte[] ReDatas = new byte[sp.BytesToRead];
sp.Read(ReDatas, 0, ReDatas.Length);//读取数据
DataProcessing(ReDatas);//数据处理
}
/// <summary>
/// 接收数据 线程
/// </summary>
public void DataReceived()
{
while (true)
{
if (sp.IsOpen)
{
int count = sp.BytesToRead;
if (count > 0)
{
byte[] readBuffer = new byte[count];
try
{
sp.Read(readBuffer, 0, count);
DataProcessing(readBuffer);//数据处理
//播放
if (num == 2)
VideoController.GetInstance().mediaPlayer.Control.Play();
//上一个,下一个视频
if (num == 13)
VideoController.GetInstance().LastVideoCK(VideoController.GetInstance().Index);
if (num == 14)
VideoController.GetInstance().NextVideoCK(VideoController.GetInstance().Index);
//ppt上一页,下一页
if (num == 36)
LoadPPT.GetInstance().ToLastOrNext(LoadPPT.GetInstance().Index, false);
if (num == 37)
LoadPPT.GetInstance().ToLastOrNext(LoadPPT.GetInstance().Index, true);
if (num == 42)
LoadPPT.GetInstance().ImgToLastOrNext(LoadPPT.GetInstance().ImgIndex, false);
if (num == 43)
LoadPPT.GetInstance().ImgToLastOrNext(LoadPPT.GetInstance().ImgIndex, true);
//音量加减,大小只能在内部调节
if (num == 17)
VideoController.GetInstance().VolumeAdd(5);
else if (num == 18)
VideoController.GetInstance().VolumeAdd(10);
else if (num == 19)
VideoController.GetInstance().VolumeAdd(15);
else if (num == 20)
VideoController.GetInstance().VolumeSub(5);
else if (num == 21)
VideoController.GetInstance().VolumeSub(10);
else if (num == 22)
VideoController.GetInstance().VolumeSub(15);
}
catch (Exception ex)
{
Debug.Log(ex.Message);
}
}
}
Thread.Sleep(10);
}
}
/// <summary>
/// 数据处理
/// </summary>
/// <param name="data">字节数组</param>
int num;
string name;
public int Num { get => num; set => num = value; }
public string Name { get => name; set => name = value; }
public void DataProcessing(byte[] data)
{
//将字节流转换成字符串
//Encoding gb2312;
//gb2312 = Encoding.GetEncoding("gb2312");
//name = gb2312.GetString(data);
//num = int.Parse(gb2312.GetString(data));
num = int.Parse(Encoding.ASCII.GetString(data));
//for (int i = 0; i < data.Length; i++)
//{
// //str += data[i].ToString();
// int asciicode = (int)(data[i]);
// str += Convert.ToString(asciicode);//字符串ASCIIstr2 为对应的ASCII字符串
//}
Debug.Log(num);
}
#endregion
}