分享一下我写的一些插件
统计代码行数插件:
public class CountCodeLine
{
[MenuItem("EGTools/CountCodeLine")]
private static void PrintTotalLine()
{
string[] fileName = Directory.GetFiles("Assets", "*.cs", SearchOption.AllDirectories);
int totalLine = 0;
foreach (var temp in fileName)
{
int nowLine = 0;
StreamReader sr = new StreamReader(temp);
while (sr.ReadLine() != null)
{
nowLine++;
}
//文件名+文件行数
//Debug.Log(String.Format("{0}——{1}", temp, nowLine));
totalLine += nowLine;
}
Debug.Log(String.Format("code line:{0}", totalLine));
}
}
把这个脚本放到Editor目录下就可了。
模型解析动画打ab包插件:
能够自动解析模型带的动画,并自动切片动画,创建动画状态机,打包ab包。【要求:如果模型带动画,则要求模型的根路径下带amPa空物体,在此空物体下,设置新的空物体,例如,模型带1个动画,则在amPa下需要新建1个空物体:动画名称_参数名称_起始帧_终止帧_0 最后的0或1代表是否循环播放,1代表是,0代表不是】插件地址文章最下面。
Json编辑插件:
可以在Unity里新建打开Json表进行编辑修改,附带合法性检测,比如id重复,类型不匹配等等。插件地址文章最下面。
根据Json生成c#类,并生成解析代码:
图中的Json如下:
{
"code": "200",
"data": {
"LstBook": [
{
"id": 1,
"coverImg": "机械制图b1c114ce-c167-4f64-83c3-378a208f7847.jpg",
"author": "果连成",
"publisher": "中国劳动社会保障出版社",
"bookName": "机械制图",
"summary": "本书主要内容包括:制图基本知识与技能,正投影作图基础,立体表面交线的投影作图,轴测图,组合体,机械图样的基本表示法,机械图样的特殊表示法,零件图,装配图,零部件测绘,金属结构图、焊接图和展开图等。"
},
{
"id": 24,
"coverImg": "液压传动与气动技术2b67dfc9-bfba-4168-ae00-39cca0d60ff1.png",
"author": "周晓峰",
"publisher": "中国劳动社会保障出版社",
"bookName": "液压传动与气动技术",
"summary": "本书主要内容包括:液压传动基础知识、液压传动动力原件和执行元件、液压传动控制元件与基本回路、液压传动系统分析与维护、气压传动基础知识、气压传动控制元件与单缸控制回路、气压传动控制元件与双缸控制回路、气压传动系统分析与维护等"
},
{
"id": 28,
"coverImg": "395ab15c-8b73-47b6-b8d4-c46e0b007aee.jpg",
"author": "王长忠",
"publisher": "中国劳动社会保障出版社",
"bookName": "焊工工艺与技能训练",
"summary": "本书的主要内容有:焊接基础知识、气焊与气割、焊条电弧焊、埋弧自动焊与碳弧气刨、CO2气体保护焊、钨极氩弧焊、电阻焊、等离子弧焊与切割及其他焊接技术、常用金属材料的焊接"
},
{
"id": 42,
"coverImg": "ac4c6781-c145-4208-8adc-b42e26ced8b0.jpg",
"author": "蒋增福",
"publisher": "中国劳动社会保障出版社",
"bookName": "机修钳工技能训练",
"summary": "本书的主要内容有:基础知识技能训练、划线、钳工常用加工方法及刀具、孔与螺纹加工、设备装修的基本知识、固定连接的装配与修理、常用传动机构的装配与修理、轴承与轴组的装配与修理、机床导轨的检测与修理、卧式车床的结构与调整、卧式车床修理工艺、牛头刨床的修理"
},
{
"id": 80,
"coverImg": "冷作工工艺与技能训练79048f62-aa5f-46bd-ad25-25e27f324003.png",
"author": "孟广斌 编",
"publisher": "中国劳动社会保障出版社",
"bookName": "冷作工工艺与技能训练",
"summary": "《冷作工工艺与技能训练》主要内容包括:矫正、放样、下料、零件预加工、弯形与压延、装配、连接等工艺知识和技能训练课题。此外,还安排了一些复合作业,以提高学生处理综合问题的能力。"
}
]
},
"msg": "操作成功",
"success": true
}
是我们后台服务器返回的数据,图中生成的代码如下:
public class A
{
public int code;
public B data;
public string msg;
public bool success;
public A()
{
}
public A(string jsonStr)
{
JsonObject obj = SimpleJson.SimpleJson.DeserializeObject<JsonObject>(jsonStr);
if (obj.ContainsKey("code"))
{
code = Convert.ToInt32(obj["code"]);
}
if (obj.ContainsKey("data"))
{
data = new B(obj["data"].ToString());
}
if (obj.ContainsKey("msg"))
{
msg = Convert.ToString(obj["msg"]);
}
if (obj.ContainsKey("success"))
{
success = Convert.ToBoolean(obj["success"]);
}
}
}
public class B
{
public List<C> LstBook;
public B()
{
}
public B(string jsonStr)
{
JsonObject obj = SimpleJson.SimpleJson.DeserializeObject<JsonObject>(jsonStr);
if (obj.ContainsKey("LstBook"))
{
LstBook = new List<C>();
JsonArray arr0 = SimpleJson.SimpleJson.DeserializeObject<JsonArray>(obj["LstBook"].ToString());
foreach (JsonObject jobj0 in arr0)
{
C c = new C(jobj0.ToString());
LstBook.Add(c);
}
}
}
}
public class C
{
public int id;
public string coverImg;
public string author;
public string publisher;
public string bookName;
public string summary;
public C()
{
}
public C(string jsonStr)
{
JsonObject obj = SimpleJson.SimpleJson.DeserializeObject<JsonObject>(jsonStr);
if (obj.ContainsKey("id"))
{
id = Convert.ToInt32(obj["id"]);
}
if (obj.ContainsKey("coverImg"))
{
coverImg = Convert.ToString(obj["coverImg"]);
}
if (obj.ContainsKey("author"))
{
author = Convert.ToString(obj["author"]);
}
if (obj.ContainsKey("publisher"))
{
publisher = Convert.ToString(obj["publisher"]);
}
if (obj.ContainsKey("bookName"))
{
bookName = Convert.ToString(obj["bookName"]);
}
if (obj.ContainsKey("summary"))
{
summary = Convert.ToString(obj["summary"]);
}
}
}
public A Deserialize(string jsonStr)
{
A a = new A(jsonStr);
return a;
}
前几个都是c#类,最后一个是解析函数,不需要也可以删除。c#类名需要手动修改。
UI脚本生成插件:
能够根据UI物体自动生成脚本,在选中一个UI物体后,界面自动解析最可能的数据类型并选中,当然你也可以点击修改数据类型,做了类型优先级判断,比如当一个物体上既有button组件又有Image组件,优先Button组件被选中,另外,当一个Text或者Image组件的父物体存在Button等更高级组件时,默认该物体不显示,如图上展示的就是默认选中状态,被选中的物体都会参与代码的生成。上图演示的生成后的代码如下:
using System.Collections;
using System.Collections.Generic;
using EG;
using DG.Tweening;
using UnityEngine;
using UnityEngine.UI;
public class TalkUI : UIPage
{
private Button bg;
private Image model;
private Button closeBtn;
private Transform ModelPa;
public override void InitPage()
{
uiPath = "UI/TalkUI";
uiType = UIType.Normal;
}
public void Awake()
{
bg = gameObject.transform.Find("bg").GetComponent<Button>();
bg.onClick.AddListener(bgClick);
model = gameObject.transform.Find("model").GetComponent<Image>();
closeBtn = gameObject.transform.Find("closeBtn").GetComponent<Button>();
closeBtn.onClick.AddListener(closeBtnClick);
ModelPa = gameObject.transform.Find("ModelPa");
}
public override void OnShowPage()
{
}
public override void OnClosePage()
{
}
public override void OnFocusPage()
{
}
public override void OnLostFocusPage()
{
}
public override void OnActive()
{
if (!gameObject.activeSelf)
{
base.OnActive();
gameObject.transform.localPosition = Vector3.up * 1080;
gameObject.transform.DOLocalMove(Vector3.down * 200, 0.1f).OnComplete(() =>
{
gameObject.transform.DOLocalMove(Vector3.up * 100, 0.1f).OnComplete(() =>
{
gameObject.transform.DOLocalMove(Vector3.zero, 0.1f);
});
});
}
}
public override void OnHide()
{
if (gameObject.activeSelf)
{
gameObject.transform.DOLocalMove(Vector3.down * 200, 0.1f).OnComplete(() =>
{
gameObject.transform.DOLocalMove(Vector3.up * 1080, 0.1f).OnComplete(() => { base.OnHide(); });
});
}
}
private void bgClick()
{
}
private void closeBtnClick()
{
}
}
上面这些插件的地址是:https://download.csdn.net/download/kk041/12772541
https://download.csdn.net/download/kk041/12772574