使用Unity调用派样机技术小结
距离这个开发这个项目已经过去差不多两年时间了,今天我闲来无事清理电脑里项目的时候无意看到了这个项目。已经都过去将近两年时间了,时光荏苒啊!两年前的自己也是一个冲动的年轻人,拼了命的做项目,现在想想自己,年轻人还是真年轻呀。算了,废话不多说,今天在这里总结一下调用派样机的开发流程。
一、需求梳理
当时公司让实现一个什么样的功能呐?就是在派样机(类似于饮料自动购物机那种机器)上的电脑上,开发一款Unity程序,这款程序上有一个二维码,用户用微信扫一扫扫这个二维码,这时用户的手机上就会出现一个互动的小程序,用户互动完成后,服务器判断用户互动完成,给派样机的Unity程序发一个网络指令。Unity程序收到该指令后,使用串口通信给派样机发一个指令,派样机硬件收到该指令后,即调用硬件推出一个小礼物,送给用户。
这个项目不是什么很复杂的项目,这里面有两个难点。1.获取服务器传过来的信号,进行判断。2.判断完毕服务器的信号后,调用派样机,调用硬件进行派样。只要开发完成这两个功能后,这个项目就算是完成了。
二、开发步骤
1.首先在Unity中创建UI,将二维码贴在Unity的程序里的UI上,UI如下图所示。
2.开发获取服务器指令功能,并且进行判断,如果获取到正确的信息,即对派样机发送派样指令,代码如下。
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking;
using Newtonsoft.Json;
using UnityEngine.UI;
public class HttpNet : MonoBehaviour
{
Action callback;
/// <summary>
/// 派样机字符类
/// </summary>
public ComManager comManager;
// Start is called before the first frame update
void Start()
{
callback += Dispchater;
StartCoroutine(GetData(callback));
}
private void Dispchater()
{
//Debug.Log("掉小样!");
comManager.DemoMechineSendCom();
}
//加载路径图片
IEnumerator GetData(Action action)//Action action
{
while (true)
{
yield return new WaitForSeconds(2.0f);
UnityWebRequest unityWebRequest = UnityWebRequest.Get("https://www.brandxspace.com/development/sendPrototype/getPrototypeState?flag=0");
//UnityWebRequest unityWebRequest = UnityWebRequest.Get(jsonUrl);
yield return unityWebRequest.SendWebRequest();
if (!unityWebRequest.isNetworkError)
{
string data = unityWebRequest.downloadHandler.text;
Data d = JsonConvert.DeserializeObject<Data>(data);
if (d != null)
{
Debug.Log(data + "------");
if (d.status == "1")
{
//掉小样
if (action != null)
{
action();
}
}
}
}
}
}
}
public class Data
{
public string status;
public String message;
public object data;
}
3.开发调用派样机派样功能,该功能主要使用的是串口通信开发,如果对串口通信开发很熟悉的话这个也是十分简单的功能,主要是通过代码设置派样的顺序和速率,代码如下:
(1)CRC.CS
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
public class CRC
{
#region CRC16
public static byte[] CRC16(byte[] data)
{
int len = data.Length;
if (len > 0)
{
ushort crc = 0xFFFF;
for (int i = 0; i < len; i++)
{
crc = (