using Newtonsoft.Json; using NUnit.Framework; using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.SceneManagement; /* 本代码主要是因为Unity限制Monobehavior不能new()。 * 因此在本类中监控ItemUseController._itemUseId 一旦不是null就触发网络通讯 * 本代码用于Home场景,挂载在Player组件下 */ public class ItemUseWebCommController : MonoBehaviour { // Start is called once before the first execution of Update after the MonoBehaviour is created //void Start() //{ //} // Update is called once per frame void Update() { if (ItemUseController._itemUseId != null) { ItemUsePost(ItemUseController._itemUseId); ItemUseController._itemUseId = null; } } // Post道具使用时网络通讯 void ItemUsePost(string itemId) { Debug.Log("Item use Post request"); List dogsList = new List(); foreach (var dog in UserProperty.dogs) { dogsList.Add(dog.d_id); } string dogsJson = JsonConvert.SerializeObject(dogsList); // 提交POST string url = "/api/item/use/"; WWWForm form = new(); form.AddField("user_id", UserProperty.userId); form.AddField("item_id", itemId); form.AddField("dog_list", dogsJson); form.AddField("date_time", DateTime.Now.ToString()); // 可选项,以服务器时间为准 StartCoroutine(WebController.PostRequest(url, form, callback: ItemUseCallback)); } // Post道具使用网络通讯后Callback void ItemUseCallback(string json) { var data = JsonConvert.DeserializeObject>(json); if (data != null && data["status"].ToString() == "success") { var user_info = JsonConvert.DeserializeObject>(data["user_info"].ToString()); UserProperty.name = user_info["user_name"]; UserProperty.coin = int.Parse(user_info["coin"]); UserProperty.mobile = user_info["mobile"]; UserProperty.email = user_info["email"]; UserProperty.level = user_info["level"]; UserProperty.isRegUser = bool.Parse(user_info["isRegUser"]); // 清空现有数据保存狗的数据 DogProperty[] dogProperties = JsonConvert.DeserializeObject(data["dogs"].ToString()); UserProperty.dogs.Clear(); foreach (var dog in dogProperties) { UserProperty.dogs.Add(dog); } } else { Debug.Log(data["message"]); } } }