有时候我们会遇到创建大量子类的情况,这些子类基本代码类似,这个时候我们就可以用工具来批量创建。
比如我要创建以下格式的类:
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<string, string>();\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);
}
/// <summary>
/// 将字符串存储为txt文本
/// </summary>
/// <param name="_path">路径</param>
/// <param name="_name">文本名称</param>
/// <param name="_str">将要存储的字符串</param>
/// <param name=""></param>
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(); }在错误回调或者返回结果失败的时候,可以将当前方法存储下来,然后打开网络连接失败界面。示例:

这样就能在合适的时机重新调用该接口。
版权声明:本文为Tel17610887670原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。