Unity用UnityWebRequest和 BestHttp的GET和POST表单提交,与php交互
生活随笔
收集整理的這篇文章主要介紹了
Unity用UnityWebRequest和 BestHttp的GET和POST表单提交,与php交互
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
目錄
在unity2021中,WWW的資源加載方式過時了,新的方法為UnityWebRequest
?BestHttp的Get方式和Post方式
?部分API
在unity2021中,WWW的資源加載方式過時了,新的方法為UnityWebRequest
實際開發過程中,游戲APP通常在連接游戲服務器之前先從web服務器獲取GM配置的相關信息,這里模擬服務器和前端的簡單交互,用Unity的UnityWebRequest的GET和POST兩種方式提交表單,向后端請求數據,后端返回JSON數據,前端根據返回數據執行相關邏輯。
Demo的內容:
?演示圖片:
?
?演示視頻:
UnityWebRequest下載圖片demo
?直接上代碼,都是老司機,demo僅供參考玩
PHP腳本:GetInfo.php
<?php// 如果是GET請求 if ($_SERVER['REQUEST_METHOD'] == 'GET') {// Get訪問。。。。if ($_GET["action"]=="login"){if ($_GET['user'] == 'admin' && $_GET['pwd'] == 'admin' && $_GET['time']>202205312146151616){exit(json_encode(['code' => '200','msg' => 'GET_success','num' => 71, 'data' => ['aa' => true, 'bb' => false, 'cc' => 15, 'dd' => 3.1415, 'ee' => [1,2,3], ]]));// var_dump("登錄成功");} else {exit(json_encode(['code' => '200','msg' => 'user does not exist','data' => []]));}} else if ($_GET["action"]=="get_picture_num"){exit(json_encode(['code' => '200','msg' => 'GET_success','num' => 71, ]));}else{exit(json_encode(['code' => '200','msg' => 'GET 請求','data' => []])); }}// 如果是POST請求 if ($_SERVER['REQUEST_METHOD'] == 'POST') {// POST訪問。。。。if ($_POST["action"]=="login"){if ($_POST['user'] == 'admin' && $_POST['pwd'] == 'admin' && $_POST['time']>202205312146151616){exit(json_encode(['code' => '200','msg' => 'POST_success','num' => 71, 'data' => ['aa' => true, 'bb' => false, 'cc' => 15, 'dd' => 3.1415, 'ee' => [1,2,3], ]]));// var_dump("登錄成功");} else {exit(json_encode(['code' => '200','msg' => 'user does not exist','data' => []]));}} else {exit(json_encode(['code' => '200','msg' => 'POST 請求','data' => []])); }}C#代碼:DownloadUI.cs
using MiniJSON; using System; using System.Collections; using System.Collections.Generic; using System.Text; using UnityEngine; using UnityEngine.Networking; using UnityEngine.UI;public class DownloadUI : MonoBehaviour {//圖片占位圖public Texture placeholder;//要替換背景的RawImagepublic RawImage testholder;//點擊左邊這個按鈕,顯示默認占位圖public Button setDefaultImage;//點擊這個按鈕,從Web服務器加載圖片顯示在上面的RawImagepublic Button setWebImage;//索引,默認從第一張圖片開始下載private int index;// 要下載的圖片的總數量private int num;void Start(){//測試,用POST向服務器提交信息StartCoroutine(HttpPostRequest());//測試,用GET向服務器提交信息StartCoroutine(HttpGetRequest());//從服務器獲取要下載的圖片的數量StartCoroutine(HttpGetPictureNumRequest());//兩個按鈕的點擊事件(注:此處省略了用代碼獲取UI主件,直接在UI上拖拽設置了)setDefaultImage.onClick.AddListener(DefaultCallBack);setWebImage.onClick.AddListener(WebCallBack);//初始化索引,默認從第一張圖片開始下載index = 1;}/// <summary>/// 從服務器獲取要下載的圖片的數量/// </summary>/// <returns></returns>private IEnumerator HttpGetPictureNumRequest(){string url = "http://wy.bestshe.top/game/GetInfo.php?action=get_picture_num";UnityWebRequest web = UnityWebRequest.Get(url);yield return web.SendWebRequest();if (web.isDone){string str = Encoding.UTF8.GetString(web.downloadHandler.data);Dictionary<string, object> data = (Dictionary<string, object>)Json.Deserialize(str);if (data.ContainsKey("num")){num = Convert.ToInt32(data["num"]);}}}private void WebCallBack(){string url = "http://wy.bestshe.top/game/";if (index > num) index = 1;url = url + index + ".jpeg";AsyncImageDownload.Instance.SetAsyncImage(url, testholder);index++;}private void DefaultCallBack(){//開始下載圖片前,如果沒有圖片,則將UITexture的主圖片設置為占位圖if (testholder.texture == null){testholder.texture = placeholder;}else{//再次點擊default替換掉下載的圖testholder.texture = placeholder;}}private IEnumerator HttpPostRequest(){string url = "http://wy.bestshe.top/game/GetInfo.php";WWWForm form = new WWWForm();form.AddField("action", "login");form.AddField("user", "admin");form.AddField("pwd", "admin");form.AddField("time", string.Format("{0:yyyyMMddHHmmssffff}", DateTime.Now));UnityWebRequest web = UnityWebRequest.Post(url, form);yield return web.SendWebRequest();if (web.result != UnityWebRequest.Result.Success)Debug.Log(" error:" + web.error);else if (web.isDone){string str = Encoding.UTF8.GetString(web.downloadHandler.data);Debug.Log("Post發送成功----" + str);}}private IEnumerator HttpGetRequest(){string url = "http://wy.bestshe.top/game/GetInfo.php?action=login&user=admin&pwd=admin";url = SetUrlTime(url);UnityWebRequest web = UnityWebRequest.Get(url);yield return web.SendWebRequest();if (web.result != UnityWebRequest.Result.Success)Debug.Log(" error:" + web.error);else if (web.isDone){string str = Encoding.UTF8.GetString(web.downloadHandler.data);Debug.Log("Get發送成功----" + str);}}public string SetUrlTime(string url){string symbol = url.IndexOf("?") > -1 ? "&" : "?";url = string.Format("{0}{1}time={2}", url, symbol, string.Format("{0:yyyyMMddHHmmssffff}", DateTime.Now));return url;} }?AsyncImageDownload.cs
using UnityEngine; using System.Collections; using System.Collections.Generic; using System.IO; using UnityEngine.Networking; using UnityEngine.UI;public class AsyncImageDownload : MonoBehaviour {public static AsyncImageDownload Instance = null;private static string path;public Dictionary<string, Texture2D> textureCache = new Dictionary<string, Texture2D>();void Awake(){Instance = this;path = Application.persistentDataPath + "/ImageCache/";if (!Directory.Exists(path)){Directory.CreateDirectory(path);}}public void SetAsyncImage(string url, RawImage texture){//判斷是否是第一次加載這張圖片if (!File.Exists(path + url.GetHashCode())){//如果之前不存在緩存文件StartCoroutine(DownloadImage(url, texture));}else{StartCoroutine(LoadLocalImage(url, texture));}}IEnumerator DownloadImage(string url, RawImage texture){using UnityWebRequest uwr = UnityWebRequestTexture.GetTexture(url);yield return uwr.SendWebRequest();if (uwr.result != UnityWebRequest.Result.Success)Debug.Log("DownloadImage error:" + uwr.error);else if (uwr.isDone){//將下載到的圖片賦值到RawImage上Texture2D mTexture2D = DownloadHandlerTexture.GetContent(uwr);texture.texture = mTexture2D;//將下載到的圖片賦值到RawImage上(二選一都行)//texture.texture = ((DownloadHandlerTexture)uwr.downloadHandler).texture;//將圖片保存至緩存路徑byte[] jpgData = mTexture2D.EncodeToJPG();File.WriteAllBytes(path + url.GetHashCode(), jpgData);textureCache[url] = mTexture2D;}}IEnumerator LoadLocalImage(string url, RawImage texture){string filePath = "file:///" + path + url.GetHashCode();if (textureCache.TryGetValue(url, out Texture2D tex)){texture.texture = tex;}else{using UnityWebRequest uwr = UnityWebRequestTexture.GetTexture(filePath);yield return uwr.SendWebRequest();if (uwr.result != UnityWebRequest.Result.Success)Debug.Log("DownloadImage error:" + uwr.error);else if (uwr.isDone){Texture2D mTexture2D = DownloadHandlerTexture.GetContent(uwr);textureCache[url] = mTexture2D;texture.texture = mTexture2D;}}} }?BestHttp的Get方式和Post方式
/*----------------------------------------------------------------Created by 王銀文件名: BestHttpTest.cs創建時間: 2022.6.26文件功能描述: Copyright ? 2022年 王銀 All rights reserved. ----------------------------------------------------------------*/using System; using System.IO; using BestHTTP; using UnityEngine; using UnityEngine.UI;namespace BestHttpDemo {public class BestHttpTest : MonoBehaviour{private Button button;private RawImage image;void Start(){button = transform.Find("Button (Legacy)").GetComponent<Button>();image = transform.Find("RawImage").GetComponent<RawImage>();button.onClick.AddListener(ButtonCallBack);OnGetRequest();OnPostRequest();}private void ButtonCallBack(){OnLoadImage();}//Get請求public void OnGetRequest(){string url = "https://wy3.bestshe.top/game/GetInfo.php?action=login&user=admin&pwd=admin";url = SetUrlTime(url);HTTPRequest request = new HTTPRequest(newUri(url), HTTPMethods.Get, OnRequestFinished);request.Send();}public string SetUrlTime(string url){string symbol = url.IndexOf("?") > -1 ? "&" : "?";url = string.Format("{0}{1}time={2}", url, symbol, string.Format("{0:yyyyMMddHHmmssffff}", DateTime.Now));return url;}//Post請求private void OnPostRequest(){string url = "https://wy3.bestshe.top/game/GetInfo.php";HTTPRequest request = new HTTPRequest(newUri(url), HTTPMethods.Post, OnRequestFinished);request.AddField("action", "login");request.AddField("user", "admin");request.AddField("pwd", "admin");request.AddField("time", string.Format("{0:yyyyMMddHHmmssffff}", DateTime.Now));request.Send();}//請求回調void OnRequestFinished(HTTPRequest request, HTTPResponse response){Debug.Log(response.DataAsText);}//下載圖片 public void OnLoadImage(){new HTTPRequest(new Uri("https://wy3.bestshe.top/game/13.jpeg"), (request, response) =>{image.texture = response.DataAsTexture2D;//保存圖片try{if (Application.platform == RuntimePlatform.Android){File.WriteAllBytes("jar:file://" + Application.persistentDataPath + "/13.jpeg", response.Data);}else{File.WriteAllBytes(Application.dataPath + "/13.jpeg", response.Data);}}catch (IOException e){Debug.LogError(e);}}).Send();}} }?部分API
public void BestHttpAPI(){GeneralStatistics stats = HTTPManager.GetGeneralStatistics(StatisticsQueryFlags.All); //獲取統計信息,統計類型全部BestHTTP.Caching.HTTPCacheService.IsSupported //是否支持緩存(只讀)stats.CacheEntityCount.ToString(); //緩存對象個數stats.CacheSize.ToString("N0"); //緩存總大小BestHTTP.Caching.HTTPCacheService.BeginClear(); //清空緩存BestHTTP.Cookies.CookieJar.IsSavingSupported //是否支持保存Cookie(只讀)stats.CookieCount.ToString(); //Cookie個數stats.CookieJarSize.ToString("N0"); //Cookie總大小BestHTTP.Cookies.CookieJar.Clear(); //清空CookieHTTPManager.GetRootCacheFolder() //獲取緩存和Cookies目錄路徑stats.Connections.ToString(); //Http連接數stats.ActiveConnections.ToString(); //激活的Http連接數stats.FreeConnections.ToString(); //空閑的Http連接數stats.RecycledConnections.ToString(); //回收的Http連接數stats.RequestsInQueue.ToString(); //Request請求在隊列的數量BestHTTP.HTTPManager.OnQuit(); //退出統計//緩存維護 緩存最大1mb, 刪除2天前的緩存BestHTTP.Caching.HTTPCacheService.BeginMaintainence(new BestHTTP.Caching.HTTPCacheMaintananceParams( TimeSpan.FromDays(2),1 *1024*1024 ));//Cookie維護 刪除7天前的Cookie并保持在最大允許大小內。BestHTTP.Cookies.CookieJar.Maintain();//獲取Cookie集合List<Cookie> cookie = CookieJar.Get(new Uri("https://www.baidu.com/"));//Cookie的API很多cookie[0].Namecookie[0].Domain cookie[0].Value}*/原文鏈接:https://blog.csdn.net/u012322710/article/details/52860747總結
以上是生活随笔為你收集整理的Unity用UnityWebRequest和 BestHttp的GET和POST表单提交,与php交互的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: C#反射的实现原理及简单应用
- 下一篇: C++面试题,阿里、百度、腾讯、华为、小