
使用Unity调用派样机技术小结
距离这个开发这个项目已经过去差不多两年时间了,今天我闲来无事清理电脑里项目的时候无意看到了这个项目。已经都过去将近两年时间了,时光荏苒啊!两年前的自己也是一个冲动的年轻人,拼了命的做项目,现在想想自己,年轻人还是真年轻呀。算了,废话不多说,今天在这里总结一下调用派样机的开发流程。
需求梳理
当时公司让实现一个什么样的功能呐?就是在派样机(类似于饮料自动购物机那种机器)上的电脑上,开发一款Unity程序,这款程序上有一个二维码,用户用微信扫一扫扫这个二维码,这时用户的手机上就会出现一个互动的小程序,用户互动完成后,服务器判断用户互动完成,给派样机的Unity程序发一个网络指令。Unity程序收到该指令后,使用串口通信给派样机发一个指令,派样机硬件收到该指令后,即调用硬件推出一个小礼物,送给用户。
图1使用的派样机
这个项目不是什么很复杂的项目,这里面有两个难点。1.获取服务器传过来的信号,进行判断。2.判断完毕服务器的信号后,调用派样机,调用硬件进行派样。只要开发完成这两个功能后,这个项目就算是完成了。
开发步骤
1.首先在Unity中创建UI,将二维码贴在Unity的程序里的UI上,UI。
图2设计的程序UI
2.开发获取服务器指令功能,并且进行判断,如果获取到正确的信息,即对派样机发送派样指令,代码如下。
usingSystem;
usingSystem.Collections;
usingSystem.Collections.Generic;
usingUnityEngine;
usingUnityEngine.Networking;
usingNewtonsoft.Json;
usingUnityEngine.UI;
publicclassManagercomManager;
//Startiscalledbeforethefirstframeupdate
voidStart()
{
callback+=dispchater;
StartCoroutine(GetData(callback));
}
privatevoiddispchater()
{
//Debug.Log("掉小样!");
comManager.DemoMechinesendCom();
}
//加载路径图片
IEnumeratorGetData(Actionaction)//Actionaction
{
while(true)
{
yieldreturnnewWaitForSeconds(2.0f);
UnityWebRequestunityWebRequest=UnityWebRequest.Get("Manager.cs
usingUnityEngine;
usingSystem.Collections;
usingSystem;
usingSystem.Threading;
usingSystem.Collections.Generic;
usingSystem.IO.Ports;
publicclassComManager:MonoBehavIoUr
{
//publicComManagerinstance;
//端口号
stringcom2="";
privateSerialPortsp2;
//波特率
privateintbaudrate;
publicfloattimer=0.1f;
//privateboolisShinning=false;
//配置文件管理类
publicConfigTestconfigTest;
//privatevoidAwake()
//{
//instance=this;
//}
voidStart()
{
//stringcom2="COM7";
com2=configTest.dic["端口号"]["portName"];
baudrate=int.Parse(configTest.dic["波特率"]["baudrate"]);
//row=8;
row=int.Parse(configTest.dic["参数"]["row"]);
//column=4;
column=int.Parse(configTest.dic["参数"]["column"]);
//depth=5;
depth=int.Parse(configTest.dic["参数"]["depth"]);
mainCount=int.Parse(configTest.dic["参数"]["mainCount"]);
StartCoroutine(StartCom());
}
IEnumeratorStartCom()
{
yieldreturnnewWaitForSeconds(0.1f);
sp2=newSerialPort(com2,baudrate,Parity.None,8,StopBits.One);
if(!sp2.IsOpen)
{
sp2.open();
}
}
///
///派样机串口
///
///
privatevoidSendDemoMechineData(byte[]data)
{
if(sp2.IsOpen)
{
sp2.Write(data,data.Length);
}
}
voidOndisable()
{
if(sp2.IsOpen)
{
sp2.Close();
}
}
privateintrow;//8
privateintcolumn;//5
privateintdepth;//10
privateintmainCount=40;//总数
privatestaticintindex=0;
publicvoidDemoMechinesendCom()
{
inttempRow=index%row;//第几个
inttempColumn=(index/row)%row;//第几行
inttempdepth=index/(row*column)%depth;
Debug.Log(index+"row:"+tempRow+"col:"+tempColumn+"depth"+tempdepth);
stringpos=tempColumn.ToString("0")+tempRow.ToString("0");
stringcorPos=System.Convert.ToString(int.Parse(pos),16).PadLeft(2,'0');
stringdata="0105"
+corPos
+"030000000000000000000000000000";
byte[]byteData=CRC.StringToHexByte(data);
byte[]crcByteData=CRC.CRC16(byteData);
//Debug.Log(CRC.BytetoString(crcByteData));
data+=CRC.BytetoString(crcByteData);
//Debug.Log(data);
byte[]byteDatas=CRC.StringToHexByte(data);
SendDemoMechineData(byteDatas);
index++;
if(index>=mainCount)
{
index=0;
}
}
}
小结
就这样,派样机的功能就基本开发完成了。虽然这个程序的功能十分简单,但是用处很大,创作不易,如果喜欢文章,请点个赞。