|
@@ -1,598 +1,598 @@
|
|
|
-using LitJson;
|
|
|
-using Newtonsoft.Json;
|
|
|
-using Newtonsoft.Json.Linq;
|
|
|
-using SC.XR.Unity;
|
|
|
-using SC.XR.Unity.Module_Device;
|
|
|
-using System;
|
|
|
-using System.Collections;
|
|
|
-using System.Collections.Generic;
|
|
|
-using System.IO;
|
|
|
-using System.Text.RegularExpressions;
|
|
|
-using UnityEngine;
|
|
|
-using UnityEngine.UI;
|
|
|
-
|
|
|
-public class LoginPanel : BaseUI
|
|
|
-{
|
|
|
- private SCInputField m_Account;
|
|
|
- private Button m_EmptyAccountBtn;
|
|
|
- private Text m_AccountErrorStr;
|
|
|
- private Transform m_AccountError;
|
|
|
- private string m_AccountStr;
|
|
|
-
|
|
|
- private SCInputField m_Password;
|
|
|
- private Button m_EmptyPwdBtn;
|
|
|
-
|
|
|
- private bool m_Islock;
|
|
|
- private Text m_PwdErrorStr;
|
|
|
- private Transform m_PwdError;
|
|
|
- private string m_PasswordStr;
|
|
|
-
|
|
|
- private Button m_Logn;
|
|
|
- private Toggle m_RemenberPwd;
|
|
|
- private bool m_IsRemberPwd;
|
|
|
-
|
|
|
- private Button m_SNBtn;
|
|
|
-
|
|
|
- private Text m_SN;
|
|
|
-
|
|
|
-
|
|
|
- protected override void OnAwake()
|
|
|
- {
|
|
|
- base.OnAwake();
|
|
|
-
|
|
|
- m_Account = CacheTransform.Find("Account/SCInputField").GetComponent<SCInputField>();
|
|
|
- m_EmptyAccountBtn = CacheTransform.Find("Account/EmptyAccount").GetComponent<Button>();
|
|
|
- m_AccountErrorStr = CacheTransform.Find("Error/AccountError/Text").GetComponent<Text>();
|
|
|
- m_AccountError = CacheTransform.Find("Error/AccountError");
|
|
|
-
|
|
|
- m_Password = CacheTransform.Find("Password/SCInputField").GetComponent<SCInputField>();
|
|
|
- m_EmptyPwdBtn = CacheTransform.Find("Password/EmptyPassword").GetComponent<Button>();
|
|
|
-
|
|
|
-
|
|
|
- m_PwdErrorStr = CacheTransform.Find("Error/PasswordError/Text").GetComponent<Text>();
|
|
|
- m_PwdError = CacheTransform.Find("Error/PasswordError");
|
|
|
-
|
|
|
- m_Logn = CacheTransform.Find("LoginBtn").GetComponent<Button>();
|
|
|
- m_RemenberPwd = CacheTransform.Find("RememberPwd").GetComponent<Toggle>();
|
|
|
- m_RemenberPwd.isOn = false;
|
|
|
- m_IsRemberPwd = false;
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- m_SN = CacheTransform.Find("SNAndVersion/SN/Text").GetComponent<Text>();
|
|
|
-
|
|
|
- AddUIListenEvent();
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- private void AddUIListenEvent()
|
|
|
- {
|
|
|
- m_Account.onEndEdit.AddListener(OnAccountEndEdit);
|
|
|
- m_EmptyAccountBtn.onClick.AddListener(OnclickEmptyAccount);
|
|
|
-
|
|
|
- m_Password.onEndEdit.AddListener(OnPasswordEndEdit);
|
|
|
- m_EmptyPwdBtn.onClick.AddListener(OnClickEmptyPwd);
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- m_Logn.onClick.AddListener(OnClickLogin);
|
|
|
- m_RemenberPwd.onValueChanged.AddListener(OnRemPwdValueChange);
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- OnClickLogin();
|
|
|
- }
|
|
|
-
|
|
|
- #region UI监听事件
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- private void OnAccountEndEdit(string str)
|
|
|
- {
|
|
|
- m_AccountStr = "";
|
|
|
- if (string.IsNullOrWhiteSpace(str))
|
|
|
- {
|
|
|
- m_AccountError.gameObject.SetActive(true);
|
|
|
- m_AccountErrorStr.text = "请输入邮箱账号";
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
-
|
|
|
-
|
|
|
- string pattern = @"^([\w-\.]+)@([\w-\.]+)(\.[a-zA-Z0-9]+)$";
|
|
|
-
|
|
|
- if (Regex.IsMatch(str, pattern))
|
|
|
- {
|
|
|
- m_AccountStr = str;
|
|
|
- m_AccountErrorStr.text = "";
|
|
|
- m_AccountError.gameObject.SetActive(false);
|
|
|
-
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- m_AccountError.gameObject.SetActive(true);
|
|
|
- m_AccountErrorStr.text = "账号不合法";
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- if (!string.IsNullOrWhiteSpace(m_AccountStr) && !string.IsNullOrWhiteSpace(m_PasswordStr))
|
|
|
- {
|
|
|
- m_Logn.interactable = true;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- private void OnclickEmptyAccount()
|
|
|
- {
|
|
|
- m_AccountErrorStr.text = "账号不能为空";
|
|
|
- m_AccountError.gameObject.SetActive(true);
|
|
|
- m_AccountStr = "";
|
|
|
- m_Account.text = "";
|
|
|
- m_Logn.interactable = false;
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- private void OnPasswordEndEdit(string str)
|
|
|
- {
|
|
|
- m_PasswordStr = "";
|
|
|
- if (string.IsNullOrWhiteSpace(str))
|
|
|
- {
|
|
|
- m_PwdError.gameObject.SetActive(true);
|
|
|
- m_PwdErrorStr.text = "请输入密码";
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- Regex RegCHZN = new Regex("[\u4e00-\u9fa5]");
|
|
|
- if (RegCHZN.IsMatch(str))
|
|
|
- {
|
|
|
- m_PwdError.gameObject.SetActive(true);
|
|
|
- m_PwdErrorStr.text = "密码不合法";
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- string pattern5 = @"^.{8,32}$";
|
|
|
-
|
|
|
- if (!Regex.IsMatch(str, pattern5))
|
|
|
- {
|
|
|
- m_PwdError.gameObject.SetActive(true);
|
|
|
- m_PwdErrorStr.text = "密码小于8位数或大于32位";
|
|
|
- return;
|
|
|
- }
|
|
|
- m_PasswordStr = str;
|
|
|
- m_PwdErrorStr.text = "";
|
|
|
- m_PwdError.gameObject.SetActive(false);
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- if (!string.IsNullOrWhiteSpace(m_AccountStr) && !string.IsNullOrWhiteSpace(m_PasswordStr))
|
|
|
- {
|
|
|
- m_Logn.interactable = true;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- private void OnClickEmptyPwd()
|
|
|
- {
|
|
|
- m_PwdErrorStr.text = "密码不能为空";
|
|
|
- m_PwdError.gameObject.SetActive(true);
|
|
|
- m_PasswordStr = "";
|
|
|
- m_Password.text = "";
|
|
|
- m_Logn.interactable = false;
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- private void OnclickLockPwd()
|
|
|
- {
|
|
|
- if (m_Islock)
|
|
|
- {
|
|
|
- m_Password.contentType = SCInputField.ContentType.Password;
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- m_Password.contentType = SCInputField.ContentType.Standard;
|
|
|
-
|
|
|
- }
|
|
|
- m_Islock = !m_Islock;
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- private void OnClickLogin()
|
|
|
+using LitJson;
|
|
|
+using Newtonsoft.Json;
|
|
|
+using Newtonsoft.Json.Linq;
|
|
|
+using SC.XR.Unity;
|
|
|
+using SC.XR.Unity.Module_Device;
|
|
|
+using System;
|
|
|
+using System.Collections;
|
|
|
+using System.Collections.Generic;
|
|
|
+using System.IO;
|
|
|
+using System.Text.RegularExpressions;
|
|
|
+using UnityEngine;
|
|
|
+using UnityEngine.UI;
|
|
|
+
|
|
|
+public class LoginPanel : BaseUI
|
|
|
+{
|
|
|
+ private SCInputField m_Account;
|
|
|
+ private Button m_EmptyAccountBtn;
|
|
|
+ private Text m_AccountErrorStr;
|
|
|
+ private Transform m_AccountError;
|
|
|
+ private string m_AccountStr;
|
|
|
+
|
|
|
+ private SCInputField m_Password;
|
|
|
+ private Button m_EmptyPwdBtn;
|
|
|
+
|
|
|
+ private bool m_Islock;
|
|
|
+ private Text m_PwdErrorStr;
|
|
|
+ private Transform m_PwdError;
|
|
|
+ private string m_PasswordStr;
|
|
|
+
|
|
|
+ private Button m_Logn;
|
|
|
+ private Toggle m_RemenberPwd;
|
|
|
+ private bool m_IsRemberPwd;
|
|
|
+
|
|
|
+ private Button m_SNBtn;
|
|
|
+
|
|
|
+ private Text m_SN;
|
|
|
+
|
|
|
+
|
|
|
+ protected override void OnAwake()
|
|
|
{
|
|
|
- m_AccountStr = "88888888@qq.com";
|
|
|
- m_PasswordStr = "123456Aa";
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- if (string.IsNullOrWhiteSpace(m_AccountStr))
|
|
|
- {
|
|
|
-
|
|
|
-
|
|
|
- m_AccountErrorStr.text = "账号不能为空";
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
- if (string.IsNullOrWhiteSpace(m_PasswordStr))
|
|
|
- {
|
|
|
-
|
|
|
- m_PwdErrorStr.text = "密码不能为空";
|
|
|
- return;
|
|
|
- }
|
|
|
-
|
|
|
- if (m_IsRemberPwd)
|
|
|
- {
|
|
|
- PlayerPrefs.SetString("Account", m_AccountStr);
|
|
|
- PlayerPrefs.SetString("Password", m_PasswordStr);
|
|
|
- PlayerPrefs.SetString("IsremPwd", "1");
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- PlayerPrefs.SetString("Account", "");
|
|
|
- PlayerPrefs.SetString("Password", "");
|
|
|
- PlayerPrefs.SetString("IsremPwd", "0");
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- Debug.Log("向服务器发送账号和密码进行登录");
|
|
|
- SendLogin sendLogin = new SendLogin();
|
|
|
- sendLogin.email = m_AccountStr;
|
|
|
- sendLogin.password = m_PasswordStr;
|
|
|
- string jsonLogin = JsonMapper.ToJson(sendLogin);
|
|
|
- UIManager.Instance.ShowUI(UINameConfig.LoadingPanel, typeof(LoadingPanel), (int)ELoadState.login);
|
|
|
- HttpTool.Instance.PostLogin("/user/login", jsonLogin, LoginCallBack);
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- public void LoginCallBack(string mes)
|
|
|
- {
|
|
|
- Debug.Log(mes);
|
|
|
- JObject obj = JObject.Parse(mes);
|
|
|
- if (obj["code"].ToString() != "200")
|
|
|
- {
|
|
|
- m_Logn.interactable = true;
|
|
|
- m_AccountError.gameObject.SetActive(true);
|
|
|
- m_AccountErrorStr.text = obj["message"].ToString();
|
|
|
- UIManager.Instance.HideUI(UINameConfig.LoadingPanel);
|
|
|
- return;
|
|
|
-
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- var token = obj["data"]["token"].ToString();
|
|
|
- UIManager.Instance.ShowUI(UINameConfig.LoadingPanel, typeof(LoadingPanel), (int)ELoadState.getMaterialValue);
|
|
|
- StartCoroutine(GetAllMaterials(token));
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- private void GetAllSceneDataCallBack(string message)
|
|
|
- {
|
|
|
- Debug.Log("账号下的场景返回数据: " + message);
|
|
|
- if (!string.IsNullOrWhiteSpace(message))
|
|
|
- {
|
|
|
- JObject jobject = JObject.Parse(message);
|
|
|
- if (jobject["code"].ToString() == "200")
|
|
|
- {
|
|
|
- message = jobject["data"].ToString();
|
|
|
- if (!string.IsNullOrWhiteSpace(message))
|
|
|
- {
|
|
|
- List<SceneValue> listScenesPage = JsonConvert.DeserializeObject<List<SceneValue>>(message);
|
|
|
- UIManager.Instance.ShowUI(UINameConfig.LoadingPanel, typeof(LoadingPanel), (int)ELoadState.sninfo);
|
|
|
- StartCoroutine(WaitSnInfo(listScenesPage));
|
|
|
- return;
|
|
|
- }
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- UIManager.Instance.HideUI(UINameConfig.LoadingPanel);
|
|
|
- m_Logn.interactable = true;
|
|
|
- m_AccountError.gameObject.SetActive(true);
|
|
|
- m_AccountErrorStr.text = "账号下的场景数据获取失败";
|
|
|
- }
|
|
|
- }
|
|
|
- Debug.LogError("获取场景列表失败");
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- IEnumerator WaitSnInfo(List<SceneValue> scenes)
|
|
|
- {
|
|
|
- List<SceneValue> sucessvalues = new List<SceneValue>();
|
|
|
- List<SceneValue> failevalues = new List<SceneValue>();
|
|
|
- for (int i = 0; i < scenes.Count; i++)
|
|
|
- {
|
|
|
- SendSnInfo sendNet = new SendSnInfo();
|
|
|
- sendNet.sn = SendSN.GetSN();
|
|
|
-
|
|
|
-
|
|
|
- sendNet.projectId = scenes[i].id;
|
|
|
- string jsonData = JsonMapper.ToJson(sendNet);
|
|
|
-
|
|
|
- yield return StartCoroutine(HttpTool.Instance.PostnInfoRequest("/client/snInfo", jsonData, i, (index, message) =>
|
|
|
- {
|
|
|
- JObject jobject = JObject.Parse(message);
|
|
|
- if (jobject["code"].ToString() == "200")
|
|
|
- {
|
|
|
- sucessvalues.Add(scenes[index]);
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- failevalues.Add(scenes[index]);
|
|
|
- }
|
|
|
- }));
|
|
|
- }
|
|
|
-
|
|
|
- string str = string.Format("{0}个场景绑定成功,{1}个场景绑定失败", sucessvalues.Count, failevalues.Count);
|
|
|
- Debug.Log(str);
|
|
|
- UIManager.Instance.ShowUI(UINameConfig.LoadingPanel, typeof(LoadingPanel), (int)ELoadState.sninfoEnd);
|
|
|
- ((LoadingPanel)UIManager.Instance.GetUI(UINameConfig.LoadingPanel)).TextStr = str;
|
|
|
-
|
|
|
- yield return new WaitForSeconds(1f);
|
|
|
- UIManager.Instance.ShowUI(UINameConfig.SceneChoose, typeof(SceneChoose), sucessvalues);
|
|
|
- UIManager.Instance.HideUI(UINameConfig.LoadingPanel);
|
|
|
- Hide();
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- IEnumerator GetAllMaterials(string mes)
|
|
|
- {
|
|
|
- HttpTool.Instance.GetAllMaterials("/material/init", mes, (message) =>
|
|
|
- {
|
|
|
- Debug.LogFormat("{0}:{1}", "AllMaterialsCallBack", message);
|
|
|
-
|
|
|
-
|
|
|
- if (!string.IsNullOrWhiteSpace(message))
|
|
|
- {
|
|
|
- JObject jObject = JObject.Parse(message);
|
|
|
- if (jObject["code"].ToString() == "200")
|
|
|
- {
|
|
|
-
|
|
|
- string data = jObject["data"].ToString();
|
|
|
- JObject dataObject = JObject.Parse(data);
|
|
|
-
|
|
|
- string single = dataObject["single"].ToString();
|
|
|
- string library = dataObject["library"].ToString();
|
|
|
- string combination = dataObject["combination"].ToString();
|
|
|
-
|
|
|
- List<MaterialObl> singleMaterials = new List<MaterialObl>();
|
|
|
- List<MaterialObl> libraryMaterials = new List<MaterialObl>();
|
|
|
- List<MaterialObl> combinationMaterials = new List<MaterialObl>();
|
|
|
- if (!string.IsNullOrWhiteSpace(single))
|
|
|
- {
|
|
|
- singleMaterials = JsonConvert.DeserializeObject<List<MaterialObl>>(single);
|
|
|
- DataManager.Instance.AllMaterials.Add("single", singleMaterials);
|
|
|
- }
|
|
|
- if (!string.IsNullOrWhiteSpace(library))
|
|
|
- {
|
|
|
- libraryMaterials = JsonConvert.DeserializeObject<List<MaterialObl>>(library);
|
|
|
- DataManager.Instance.AllMaterials.Add("library", libraryMaterials);
|
|
|
- }
|
|
|
- if (!string.IsNullOrWhiteSpace(combination))
|
|
|
- {
|
|
|
- combinationMaterials = JsonConvert.DeserializeObject<List<MaterialObl>>(combination);
|
|
|
- DataManager.Instance.AllMaterials.Add("combination", combinationMaterials);
|
|
|
- }
|
|
|
- CalMat(singleMaterials);
|
|
|
- CalMat(libraryMaterials);
|
|
|
- CalMat(combinationMaterials);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- UIManager.Instance.ShowUI(UINameConfig.LoadingPanel, typeof(LoadingPanel), (int)ELoadState.getAllScene);
|
|
|
-
|
|
|
- HttpTool.Instance.Get("/project/index", GetAllSceneDataCallBack);
|
|
|
- });
|
|
|
- yield return null;
|
|
|
- }
|
|
|
-
|
|
|
- private void CalMat(List<MaterialObl> mats)
|
|
|
- {
|
|
|
- for (int i = 0; i < mats.Count; i++)
|
|
|
- {
|
|
|
- var mat = mats[i];
|
|
|
- if (!string.IsNullOrWhiteSpace(mat.icon))
|
|
|
- {
|
|
|
- DownloadData data1 = new DownloadData();
|
|
|
- string filename = Path.GetFileName(mat.icon);
|
|
|
- data1.name = filename;
|
|
|
- data1.type = 1;
|
|
|
- data1.downloadPath = mat.icon;
|
|
|
- data1.updateTime = mat.updateTime;
|
|
|
-
|
|
|
- data1.localSavePath = DownloadManager.Instance.LocaDataPath + "/Icon/" + filename;
|
|
|
- DownloadManager.Instance.AddDownloadData(data1);
|
|
|
- }
|
|
|
- if (mat.materialList != null)
|
|
|
- {
|
|
|
- for (int m = 0; m < mat.materialList.Count; m++)
|
|
|
- {
|
|
|
- var matObj = mat.materialList[m];
|
|
|
- if (int.Parse(matObj.type) != 4)
|
|
|
- {
|
|
|
- DownloadData data = new DownloadData(matObj);
|
|
|
- DownloadManager.Instance.AddDownloadData(data);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- private void OnRemPwdValueChange(bool b)
|
|
|
- {
|
|
|
- m_IsRemberPwd = b;
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- private void OnClickSnBtn()
|
|
|
- {
|
|
|
- string sn = SendSN.GetSN();
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- #endregion
|
|
|
-
|
|
|
-
|
|
|
- protected override void OnInit()
|
|
|
- {
|
|
|
- base.OnInit();
|
|
|
- }
|
|
|
-
|
|
|
- protected override void OnShow(object param)
|
|
|
- {
|
|
|
- base.OnShow(param);
|
|
|
-
|
|
|
- gameObject.transform.localScale = new Vector3(1, 1, 1);
|
|
|
- m_Logn.interactable = false;
|
|
|
- m_AccountStr = PlayerPrefs.GetString("Account", "");
|
|
|
- m_PasswordStr = PlayerPrefs.GetString("Password", "");
|
|
|
- int n = int.Parse(PlayerPrefs.GetString("IsremPwd", "0"));
|
|
|
- m_RemenberPwd.isOn = n > 0 ? true : false;
|
|
|
- m_IsRemberPwd = n > 0 ? true : false;
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- m_RemenberPwd.isOn = m_IsRemberPwd;
|
|
|
-
|
|
|
- if (!string.IsNullOrWhiteSpace(m_AccountStr) && !string.IsNullOrWhiteSpace(m_PasswordStr))
|
|
|
- {
|
|
|
- m_Account.text = m_AccountStr;
|
|
|
- m_Password.text = m_PasswordStr;
|
|
|
- m_Logn.interactable = true;
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- m_Account.text = "";
|
|
|
- m_Password.text = "";
|
|
|
- m_AccountStr = "";
|
|
|
- m_PasswordStr = "";
|
|
|
- m_Logn.interactable = false;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- private void Update()
|
|
|
- {
|
|
|
- if (API_GSXR_Slam.GSXR_Is_SlamInitialized())
|
|
|
- {
|
|
|
- m_SN.text = SendSN.GetSN();
|
|
|
-
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- protected override void OnHide()
|
|
|
- {
|
|
|
- base.OnHide();
|
|
|
- }
|
|
|
-
|
|
|
- protected override void OnDestroy()
|
|
|
- {
|
|
|
- base.OnDestroy();
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-public class SendInit
|
|
|
-{
|
|
|
- public string sn { get; set; }
|
|
|
- public int projectId { get; set; }
|
|
|
-}
|
|
|
-
|
|
|
-public class SendLogin
|
|
|
-{
|
|
|
- public string email { get; set; }
|
|
|
- public string password { get; set; }
|
|
|
-}
|
|
|
-
|
|
|
-public class SendMaterials
|
|
|
-{
|
|
|
- public string url { get; set; }
|
|
|
-}
|
|
|
-
|
|
|
-public class SendSceneDetail
|
|
|
-{
|
|
|
- public int id { get; set; }
|
|
|
-}
|
|
|
+ base.OnAwake();
|
|
|
+
|
|
|
+ m_Account = CacheTransform.Find("Account/SCInputField").GetComponent<SCInputField>();
|
|
|
+ m_EmptyAccountBtn = CacheTransform.Find("Account/EmptyAccount").GetComponent<Button>();
|
|
|
+ m_AccountErrorStr = CacheTransform.Find("Error/AccountError/Text").GetComponent<Text>();
|
|
|
+ m_AccountError = CacheTransform.Find("Error/AccountError");
|
|
|
+
|
|
|
+ m_Password = CacheTransform.Find("Password/SCInputField").GetComponent<SCInputField>();
|
|
|
+ m_EmptyPwdBtn = CacheTransform.Find("Password/EmptyPassword").GetComponent<Button>();
|
|
|
+
|
|
|
+
|
|
|
+ m_PwdErrorStr = CacheTransform.Find("Error/PasswordError/Text").GetComponent<Text>();
|
|
|
+ m_PwdError = CacheTransform.Find("Error/PasswordError");
|
|
|
+
|
|
|
+ m_Logn = CacheTransform.Find("LoginBtn").GetComponent<Button>();
|
|
|
+ m_RemenberPwd = CacheTransform.Find("RememberPwd").GetComponent<Toggle>();
|
|
|
+ m_RemenberPwd.isOn = false;
|
|
|
+ m_IsRemberPwd = false;
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ m_SN = CacheTransform.Find("SNAndVersion/SN/Text").GetComponent<Text>();
|
|
|
+
|
|
|
+ AddUIListenEvent();
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ private void AddUIListenEvent()
|
|
|
+ {
|
|
|
+ m_Account.onEndEdit.AddListener(OnAccountEndEdit);
|
|
|
+ m_EmptyAccountBtn.onClick.AddListener(OnclickEmptyAccount);
|
|
|
+
|
|
|
+ m_Password.onEndEdit.AddListener(OnPasswordEndEdit);
|
|
|
+ m_EmptyPwdBtn.onClick.AddListener(OnClickEmptyPwd);
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ m_Logn.onClick.AddListener(OnClickLogin);
|
|
|
+ m_RemenberPwd.onValueChanged.AddListener(OnRemPwdValueChange);
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ OnClickLogin();
|
|
|
+ }
|
|
|
+
|
|
|
+ #region UI监听事件
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ private void OnAccountEndEdit(string str)
|
|
|
+ {
|
|
|
+ m_AccountStr = "";
|
|
|
+ if (string.IsNullOrWhiteSpace(str))
|
|
|
+ {
|
|
|
+ m_AccountError.gameObject.SetActive(true);
|
|
|
+ m_AccountErrorStr.text = "请输入邮箱账号";
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+
|
|
|
+
|
|
|
+ string pattern = @"^([\w-\.]+)@([\w-\.]+)(\.[a-zA-Z0-9]+)$";
|
|
|
+
|
|
|
+ if (Regex.IsMatch(str, pattern))
|
|
|
+ {
|
|
|
+ m_AccountStr = str;
|
|
|
+ m_AccountErrorStr.text = "";
|
|
|
+ m_AccountError.gameObject.SetActive(false);
|
|
|
+
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ m_AccountError.gameObject.SetActive(true);
|
|
|
+ m_AccountErrorStr.text = "账号不合法";
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!string.IsNullOrWhiteSpace(m_AccountStr) && !string.IsNullOrWhiteSpace(m_PasswordStr))
|
|
|
+ {
|
|
|
+ m_Logn.interactable = true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ private void OnclickEmptyAccount()
|
|
|
+ {
|
|
|
+ m_AccountErrorStr.text = "账号不能为空";
|
|
|
+ m_AccountError.gameObject.SetActive(true);
|
|
|
+ m_AccountStr = "";
|
|
|
+ m_Account.text = "";
|
|
|
+ m_Logn.interactable = false;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ private void OnPasswordEndEdit(string str)
|
|
|
+ {
|
|
|
+ m_PasswordStr = "";
|
|
|
+ if (string.IsNullOrWhiteSpace(str))
|
|
|
+ {
|
|
|
+ m_PwdError.gameObject.SetActive(true);
|
|
|
+ m_PwdErrorStr.text = "请输入密码";
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ Regex RegCHZN = new Regex("[\u4e00-\u9fa5]");
|
|
|
+ if (RegCHZN.IsMatch(str))
|
|
|
+ {
|
|
|
+ m_PwdError.gameObject.SetActive(true);
|
|
|
+ m_PwdErrorStr.text = "密码不合法";
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ string pattern5 = @"^.{8,32}$";
|
|
|
+
|
|
|
+ if (!Regex.IsMatch(str, pattern5))
|
|
|
+ {
|
|
|
+ m_PwdError.gameObject.SetActive(true);
|
|
|
+ m_PwdErrorStr.text = "密码小于8位数或大于32位";
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ m_PasswordStr = str;
|
|
|
+ m_PwdErrorStr.text = "";
|
|
|
+ m_PwdError.gameObject.SetActive(false);
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ if (!string.IsNullOrWhiteSpace(m_AccountStr) && !string.IsNullOrWhiteSpace(m_PasswordStr))
|
|
|
+ {
|
|
|
+ m_Logn.interactable = true;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ private void OnClickEmptyPwd()
|
|
|
+ {
|
|
|
+ m_PwdErrorStr.text = "密码不能为空";
|
|
|
+ m_PwdError.gameObject.SetActive(true);
|
|
|
+ m_PasswordStr = "";
|
|
|
+ m_Password.text = "";
|
|
|
+ m_Logn.interactable = false;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ private void OnclickLockPwd()
|
|
|
+ {
|
|
|
+ if (m_Islock)
|
|
|
+ {
|
|
|
+ m_Password.contentType = SCInputField.ContentType.Password;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ m_Password.contentType = SCInputField.ContentType.Standard;
|
|
|
+
|
|
|
+ }
|
|
|
+ m_Islock = !m_Islock;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ private void OnClickLogin()
|
|
|
+ {
|
|
|
+
|
|
|
+ m_PasswordStr = "123456Aa";
|
|
|
+
|
|
|
+
|
|
|
+ m_AccountStr = "666666@qq.com";
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ if (string.IsNullOrWhiteSpace(m_AccountStr))
|
|
|
+ {
|
|
|
+
|
|
|
+
|
|
|
+ m_AccountErrorStr.text = "账号不能为空";
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (string.IsNullOrWhiteSpace(m_PasswordStr))
|
|
|
+ {
|
|
|
+
|
|
|
+ m_PwdErrorStr.text = "密码不能为空";
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (m_IsRemberPwd)
|
|
|
+ {
|
|
|
+ PlayerPrefs.SetString("Account", m_AccountStr);
|
|
|
+ PlayerPrefs.SetString("Password", m_PasswordStr);
|
|
|
+ PlayerPrefs.SetString("IsremPwd", "1");
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ PlayerPrefs.SetString("Account", "");
|
|
|
+ PlayerPrefs.SetString("Password", "");
|
|
|
+ PlayerPrefs.SetString("IsremPwd", "0");
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ Debug.Log("向服务器发送账号和密码进行登录");
|
|
|
+ SendLogin sendLogin = new SendLogin();
|
|
|
+ sendLogin.email = m_AccountStr;
|
|
|
+ sendLogin.password = m_PasswordStr;
|
|
|
+ string jsonLogin = JsonMapper.ToJson(sendLogin);
|
|
|
+ UIManager.Instance.ShowUI(UINameConfig.LoadingPanel, typeof(LoadingPanel), (int)ELoadState.login);
|
|
|
+ HttpTool.Instance.PostLogin("/user/login", jsonLogin, LoginCallBack);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ public void LoginCallBack(string mes)
|
|
|
+ {
|
|
|
+ Debug.Log(mes);
|
|
|
+ JObject obj = JObject.Parse(mes);
|
|
|
+ if (obj["code"].ToString() != "200")
|
|
|
+ {
|
|
|
+ m_Logn.interactable = true;
|
|
|
+ m_AccountError.gameObject.SetActive(true);
|
|
|
+ m_AccountErrorStr.text = obj["message"].ToString();
|
|
|
+ UIManager.Instance.HideUI(UINameConfig.LoadingPanel);
|
|
|
+ return;
|
|
|
+
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ var token = obj["data"]["token"].ToString();
|
|
|
+ UIManager.Instance.ShowUI(UINameConfig.LoadingPanel, typeof(LoadingPanel), (int)ELoadState.getMaterialValue);
|
|
|
+ StartCoroutine(GetAllMaterials(token));
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ private void GetAllSceneDataCallBack(string message)
|
|
|
+ {
|
|
|
+ Debug.Log("账号下的场景返回数据: " + message);
|
|
|
+ if (!string.IsNullOrWhiteSpace(message))
|
|
|
+ {
|
|
|
+ JObject jobject = JObject.Parse(message);
|
|
|
+ if (jobject["code"].ToString() == "200")
|
|
|
+ {
|
|
|
+ message = jobject["data"].ToString();
|
|
|
+ if (!string.IsNullOrWhiteSpace(message))
|
|
|
+ {
|
|
|
+ List<SceneValue> listScenesPage = JsonConvert.DeserializeObject<List<SceneValue>>(message);
|
|
|
+ UIManager.Instance.ShowUI(UINameConfig.LoadingPanel, typeof(LoadingPanel), (int)ELoadState.sninfo);
|
|
|
+ StartCoroutine(WaitSnInfo(listScenesPage));
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ UIManager.Instance.HideUI(UINameConfig.LoadingPanel);
|
|
|
+ m_Logn.interactable = true;
|
|
|
+ m_AccountError.gameObject.SetActive(true);
|
|
|
+ m_AccountErrorStr.text = "账号下的场景数据获取失败";
|
|
|
+ }
|
|
|
+ }
|
|
|
+ Debug.LogError("获取场景列表失败");
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ IEnumerator WaitSnInfo(List<SceneValue> scenes)
|
|
|
+ {
|
|
|
+ List<SceneValue> sucessvalues = new List<SceneValue>();
|
|
|
+ List<SceneValue> failevalues = new List<SceneValue>();
|
|
|
+ for (int i = 0; i < scenes.Count; i++)
|
|
|
+ {
|
|
|
+ SendSnInfo sendNet = new SendSnInfo();
|
|
|
+ sendNet.sn = SendSN.GetSN();
|
|
|
+
|
|
|
+
|
|
|
+ sendNet.projectId = scenes[i].id;
|
|
|
+ string jsonData = JsonMapper.ToJson(sendNet);
|
|
|
+
|
|
|
+ yield return StartCoroutine(HttpTool.Instance.PostnInfoRequest("/client/snInfo", jsonData, i, (index, message) =>
|
|
|
+ {
|
|
|
+ JObject jobject = JObject.Parse(message);
|
|
|
+ if (jobject["code"].ToString() == "200")
|
|
|
+ {
|
|
|
+ sucessvalues.Add(scenes[index]);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ failevalues.Add(scenes[index]);
|
|
|
+ }
|
|
|
+ }));
|
|
|
+ }
|
|
|
+
|
|
|
+ string str = string.Format("{0}个场景绑定成功,{1}个场景绑定失败", sucessvalues.Count, failevalues.Count);
|
|
|
+ Debug.Log(str);
|
|
|
+ UIManager.Instance.ShowUI(UINameConfig.LoadingPanel, typeof(LoadingPanel), (int)ELoadState.sninfoEnd);
|
|
|
+ ((LoadingPanel)UIManager.Instance.GetUI(UINameConfig.LoadingPanel)).TextStr = str;
|
|
|
+
|
|
|
+ yield return new WaitForSeconds(1f);
|
|
|
+ UIManager.Instance.ShowUI(UINameConfig.SceneChoose, typeof(SceneChoose), sucessvalues);
|
|
|
+ UIManager.Instance.HideUI(UINameConfig.LoadingPanel);
|
|
|
+ Hide();
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ IEnumerator GetAllMaterials(string mes)
|
|
|
+ {
|
|
|
+ HttpTool.Instance.GetAllMaterials("/material/init", mes, (message) =>
|
|
|
+ {
|
|
|
+ Debug.LogFormat("{0}:{1}", "AllMaterialsCallBack", message);
|
|
|
+
|
|
|
+
|
|
|
+ if (!string.IsNullOrWhiteSpace(message))
|
|
|
+ {
|
|
|
+ JObject jObject = JObject.Parse(message);
|
|
|
+ if (jObject["code"].ToString() == "200")
|
|
|
+ {
|
|
|
+
|
|
|
+ string data = jObject["data"].ToString();
|
|
|
+ JObject dataObject = JObject.Parse(data);
|
|
|
+
|
|
|
+ string single = dataObject["single"].ToString();
|
|
|
+ string library = dataObject["library"].ToString();
|
|
|
+ string combination = dataObject["combination"].ToString();
|
|
|
+
|
|
|
+ List<MaterialObl> singleMaterials = new List<MaterialObl>();
|
|
|
+ List<MaterialObl> libraryMaterials = new List<MaterialObl>();
|
|
|
+ List<MaterialObl> combinationMaterials = new List<MaterialObl>();
|
|
|
+ if (!string.IsNullOrWhiteSpace(single))
|
|
|
+ {
|
|
|
+ singleMaterials = JsonConvert.DeserializeObject<List<MaterialObl>>(single);
|
|
|
+ DataManager.Instance.AllMaterials.Add("single", singleMaterials);
|
|
|
+ }
|
|
|
+ if (!string.IsNullOrWhiteSpace(library))
|
|
|
+ {
|
|
|
+ libraryMaterials = JsonConvert.DeserializeObject<List<MaterialObl>>(library);
|
|
|
+ DataManager.Instance.AllMaterials.Add("library", libraryMaterials);
|
|
|
+ }
|
|
|
+ if (!string.IsNullOrWhiteSpace(combination))
|
|
|
+ {
|
|
|
+ combinationMaterials = JsonConvert.DeserializeObject<List<MaterialObl>>(combination);
|
|
|
+ DataManager.Instance.AllMaterials.Add("combination", combinationMaterials);
|
|
|
+ }
|
|
|
+ CalMat(singleMaterials);
|
|
|
+ CalMat(libraryMaterials);
|
|
|
+ CalMat(combinationMaterials);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ UIManager.Instance.ShowUI(UINameConfig.LoadingPanel, typeof(LoadingPanel), (int)ELoadState.getAllScene);
|
|
|
+
|
|
|
+ HttpTool.Instance.Get("/project/index", GetAllSceneDataCallBack);
|
|
|
+ });
|
|
|
+ yield return null;
|
|
|
+ }
|
|
|
+
|
|
|
+ private void CalMat(List<MaterialObl> mats)
|
|
|
+ {
|
|
|
+ for (int i = 0; i < mats.Count; i++)
|
|
|
+ {
|
|
|
+ var mat = mats[i];
|
|
|
+ if (!string.IsNullOrWhiteSpace(mat.icon))
|
|
|
+ {
|
|
|
+ DownloadData data1 = new DownloadData();
|
|
|
+ string filename = Path.GetFileName(mat.icon);
|
|
|
+ data1.name = filename;
|
|
|
+ data1.type = 1;
|
|
|
+ data1.downloadPath = mat.icon;
|
|
|
+ data1.updateTime = mat.updateTime;
|
|
|
+
|
|
|
+ data1.localSavePath = DownloadManager.Instance.LocaDataPath + "/Icon/" + filename;
|
|
|
+ DownloadManager.Instance.AddDownloadData(data1);
|
|
|
+ }
|
|
|
+ if (mat.materialList != null)
|
|
|
+ {
|
|
|
+ for (int m = 0; m < mat.materialList.Count; m++)
|
|
|
+ {
|
|
|
+ var matObj = mat.materialList[m];
|
|
|
+ if (int.Parse(matObj.type) != 4)
|
|
|
+ {
|
|
|
+ DownloadData data = new DownloadData(matObj);
|
|
|
+ DownloadManager.Instance.AddDownloadData(data);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ private void OnRemPwdValueChange(bool b)
|
|
|
+ {
|
|
|
+ m_IsRemberPwd = b;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ private void OnClickSnBtn()
|
|
|
+ {
|
|
|
+ string sn = SendSN.GetSN();
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ #endregion
|
|
|
+
|
|
|
+
|
|
|
+ protected override void OnInit()
|
|
|
+ {
|
|
|
+ base.OnInit();
|
|
|
+ }
|
|
|
+
|
|
|
+ protected override void OnShow(object param)
|
|
|
+ {
|
|
|
+ base.OnShow(param);
|
|
|
+
|
|
|
+ gameObject.transform.localScale = new Vector3(1, 1, 1);
|
|
|
+ m_Logn.interactable = false;
|
|
|
+ m_AccountStr = PlayerPrefs.GetString("Account", "");
|
|
|
+ m_PasswordStr = PlayerPrefs.GetString("Password", "");
|
|
|
+ int n = int.Parse(PlayerPrefs.GetString("IsremPwd", "0"));
|
|
|
+ m_RemenberPwd.isOn = n > 0 ? true : false;
|
|
|
+ m_IsRemberPwd = n > 0 ? true : false;
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ m_RemenberPwd.isOn = m_IsRemberPwd;
|
|
|
+
|
|
|
+ if (!string.IsNullOrWhiteSpace(m_AccountStr) && !string.IsNullOrWhiteSpace(m_PasswordStr))
|
|
|
+ {
|
|
|
+ m_Account.text = m_AccountStr;
|
|
|
+ m_Password.text = m_PasswordStr;
|
|
|
+ m_Logn.interactable = true;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ m_Account.text = "";
|
|
|
+ m_Password.text = "";
|
|
|
+ m_AccountStr = "";
|
|
|
+ m_PasswordStr = "";
|
|
|
+ m_Logn.interactable = false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private void Update()
|
|
|
+ {
|
|
|
+ if (API_GSXR_Slam.GSXR_Is_SlamInitialized())
|
|
|
+ {
|
|
|
+ m_SN.text = SendSN.GetSN();
|
|
|
+
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ protected override void OnHide()
|
|
|
+ {
|
|
|
+ base.OnHide();
|
|
|
+ }
|
|
|
+
|
|
|
+ protected override void OnDestroy()
|
|
|
+ {
|
|
|
+ base.OnDestroy();
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+public class SendInit
|
|
|
+{
|
|
|
+ public string sn { get; set; }
|
|
|
+ public int projectId { get; set; }
|
|
|
+}
|
|
|
+
|
|
|
+public class SendLogin
|
|
|
+{
|
|
|
+ public string email { get; set; }
|
|
|
+ public string password { get; set; }
|
|
|
+}
|
|
|
+
|
|
|
+public class SendMaterials
|
|
|
+{
|
|
|
+ public string url { get; set; }
|
|
|
+}
|
|
|
+
|
|
|
+public class SendSceneDetail
|
|
|
+{
|
|
|
+ public int id { get; set; }
|
|
|
+}
|