Unity中的插件分享
分享一下我写的一些插件
统计代码行数插件:
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.****.net/download/kk041/12772541