有时候我们会遇到创建大量子类的情况,这些子类基本代码类似,这个时候我们就可以用工具来批量创建。
比如我要创建以下格式的类:
- private class HeartbeatSend
- {
- public string checkpointAuto;
- public string checkpointId;
- public string chipDate;
- public string flag;
- public string gold;
- public string mapDate;
- public string resinMark;
- public string scienceDate;
- public string sign;
- public string GetSign()
- {
- var _dic = new Dictionary<string, string>();
- _dic.Add("checkpointAuto", checkpointAuto);
- _dic.Add("checkpointId", checkpointId);
- _dic.Add("chipDate", chipDate);
- _dic.Add("flag", flag);
- _dic.Add("gold", gold);
- _dic.Add("mapDate", mapDate);
- _dic.Add("resinMark", resinMark);
- _dic.Add("scienceDate", scienceDate);
- return HttpClient.Inst.GetSign(_dic);
- }
- }
这是个心跳类,里面包含了用到的数据及一个解析方法。如果每个接口都写一遍就太麻烦了,我们可以用到如下工具脚本。
- using System.IO;
- using UnityEditor;
- using UnityEngine;
- using System;
- using System.Collections.Generic;
-
- public class NewBehaviourScript : MonoBehaviour
- {
-
- public List<string> allHead = new List<string>();
-
- public string Name;
-
- private void Start()
- {
- string _str = "";
- _str += "private class " + Name + "\n" + "{\n";
- foreach (var idx in allHead)
- {
- _str += "public string " + idx + ";\n";
- }
-
- _str += "public string GetSign()\n{\nvar _dic = new Dictionary
();\n" ; - foreach (var idx in allHead)
- {
- if (idx != "sign")
- _str += "_dic.Add(\"" + idx + "\"," + idx + ");\n";
- }
-
-
- _str += "return HttpClient.Inst.GetSign(_dic);\n}\n}";
-
- StringToTxt("Scenes", Name, _str);
- }
-
- ///
- /// 将字符串存储为txt文本
- ///
- /// 路径
- /// 文本名称
- /// 将要存储的字符串
- ///
- public void StringToTxt(string _path, string _name, string _str)
- {
- Debug.Log("开始存储数据");
- AssetDatabase.Refresh();
- Directory.CreateDirectory(_path);
- using (StreamWriter writer = File.CreateText(_path + "/" + _name + ".cs"))
- {
- writer.Write(_str);
- }
- AssetDatabase.Refresh();
- //Debug.Log(gameObject.name + "转表完毕");
- }
- }
-
拖到物体上,运行即可创建。
如果有其它格式的,可以自己改改。
关于错误处理:
通常由于弱网或者无网络情况下,会出现断网的情况,这个时候可以给post和get再封装一层,用于断网的连接。比如:
- public int Post(string _str, string url, out string _reslut, Action _callback, Action _errorAc)
- {
- var _state = HttpPost(url + _module + "/" + _key, _str, out _reslut);
- if (_state == -1) _errorAc();
- else _callback();
- return _state;
- }
利用事件来处理错误的方法:
- private Action netAction;
- public void SetNetAction(Action _ac) { netAction = null; netAction = _ac; }
- public void GetNetAction() { netAction?.Invoke(); }
在错误回调或者返回结果失败的时候,可以将当前方法存储下来,然后打开网络连接失败界面。示例:
这样就能在合适的时机重新调用该接口。