1.每一个场景必须要挂的通信代码
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Text;
using UnityEngine;
using UnityEngine.Networking;
using UnityEngine.UI;
public class WWWUrl : MonoBehaviour
{
public static WWWUrl Instance;
public OnReceiveDelegate OnReceive;
public static string WebError = null;
public Text Cuowu;
public void Awake()
{
if (Instance == null)
{
Instance = this;
// DontDestroyOnLoad(this.gameObject);
}
else
{
//Destroy(gameObject);
}
}
public void SendWebMessage(string url)
{
StartCoroutine(Send(url));
Debug.Log("链接网站:" + url);
}
/// <summary>
/// 从网站上获取数据
/// </summary>
/// <param name="url">地址</param>
/// <returns></returns>
IEnumerator Send(string url)
{
UnityWebRequest request = UnityWebRequest.Get(url);
yield return request.SendWebRequest();
WebError = request.error;
if (request.isNetworkError || request.isHttpError)
{
Debug.LogError(request.error);
Cuowu.text = "错误:" + WebError + "网址:" + url;
}
else
{
//文字格式转换一下UTF8编码格式,防止出错
string msg = request.downloadHandler.text;
byte[] buffer = Encoding.UTF8.GetBytes(msg);
string sResult = Encoding.UTF8.GetString(buffer, 0, buffer.Length);
byte[] bomBuffer = new byte[] { 0xef, 0xbb, 0xbf };
if (buffer[0] == bomBuffer[0] && buffer[1] == bomBuffer[1] && buffer[2] == bomBuffer[2])
{
int copyLength = buffer.Length - 3;
byte[] dataNew = new byte[copyLength];
Buffer.BlockCopy(buffer, 3, dataNew, 0, copyLength);
sResult = Encoding.UTF8.GetString(dataNew);
}
OnReceive?.Invoke(sResult);
//OnReceive?.Invoke(request.downloadHandler.text);
}
}
public void SendWebImage(string path, string webWrl)
{
StartCoroutine(loadWebImage(path, webWrl));
}
/// <summary>
/// 从网上下载图片
/// </summary>
/// <param name="path">本地图片地址</param>
/// <param name="webWrl">网址</param>
/// <param name="name">图片名字</param>
/// <returns></returns>
IEnumerator loadWebImage(string path, string webWrl)
{
UnityWebRequest wr = new UnityWebRequest(webWrl);
DownloadHandlerTexture texD1 = new DownloadHandlerTexture(true);
wr.downloadHandler = texD1;
//yield return wr.SendWebRequest();
if (!wr.isNetworkError || !wr.isHttpError)
{
Texture2D tex = new Texture2D(10, 10);
tex = texD1.texture;
//保存本地
Byte[] bytes = tex.EncodeToPNG();
File.WriteAllBytes(path + "\\" + name, bytes);
Debug.Log("下载完成");
yield return tex;
}
else
{
Debug.LogError(wr.error);
yield return null;
}
}
}
public delegate void OnReceiveDelegate(string data);
2.定义好要解析的json
/// <summary>
/// 图片的信息
/// </summary>
[Serializable]
public class PictrueContent
{
/// <summary>
/// 图片ID
/// </summary>
[SerializeField]
public int id;
/// <summary>
/// 图片下载网址
/// </summary>
[SerializeField]
public string url;
/// <summary>
/// 图片的名字
/// </summary>
[SerializeField]
public string photo_name;
/// <summary>
/// 所属学校
/// </summary>
[SerializeField]
public string university;
/// <summary>
/// 所属班级
/// </summary>
[SerializeField]
public string banji;
/// <summary>
/// 毕业时间
/// </summary>
[SerializeField]
public string graduation_date;
/// <summary>
/// 照片类型
/// </summary>
[SerializeField]
public string type;
}
/// <summary>
/// 数据信息数组
/// </summary>
[Serializable]
public class PictrueData
{
/// <summary>
/// 照片信息
/// </summary>
[SerializeField]
public PictrueContent[] data;
/// <summary>
/// 那种模式
/// </summary>
[SerializeField]
public int mode;
/// <summary>
/// 信息数据
/// </summary>
[SerializeField]
public int size;
/// <summary>
/// 总数
/// </summary>
[SerializeField]
public int count;
/// <summary>
/// 页数
/// </summary>
[SerializeField]
public int page;
}
注意:json通信传输,一定要序列化! [SerializeField]
3.发送和接受网络端的信息
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Threading;
using UnityEngine;
using UnityEngine.Networking;
using UnityEngine.SceneManagement;
using UnityEngine.UI;
public class ReadPictrueData : MonoBehaviour
{
public static ReadPictrueData Instance;
/// <summary>
/// 从网络获取的数据
/// </summary>
public Queue<PictrueContent> jsonData = new Queue<PictrueContent>();
private string wwwUrl;
public Text TxtShow;
public Text TxtShowData;
void Start()
{
Instance = this;
//DontDestroyOnLoad(this.gameObject);
isScene = true;
loadNumber = 0;
WWWUrl.Instance.OnReceive += OnReceive;
FaSong();
}
/// <summary>
/// 监听网络返回的数据
/// </summary>
/// <param name="data"></param>
private void OnReceive(string data)
{
if (WWWUrl.WebError != null)
{
TxtShowData.text = WWWUrl.WebError;
}
else
{
TxtShowData.text = data;
}
Debug.Log("收到的数据!" + data);
PictrueData jsonTemp = JsonUtility.FromJson<PictrueData>(data);
if (data.Contains("\"mode\":\"0\""))
{
for (int i = 0; i < jsonTemp.data.Length; i++)
{
//在队列的末端添加元素
jsonData.Enqueue(jsonTemp.data[i]);
}
}
}
public void FaSong()
{
//和服务端定义好各个数据的内容
string url = string.Format(wwwUrl + "?mode={0}&university={1}&type={2}&graduation_date={3}&banji={4}&page={5}&size={6}", 0, null, "照片", null, null, loadNumber, 30);
WWWUrl.Instance.SendWebMessage(url);
}
}