问题:编写代码时会有很多UI的查找、事件监听等经常重复编写的代码。因此通过编辑器去自动初始化生成代码。
目的:开发效率的提高
首先,根据需求,准备预制体……废话不多开始心路历程:
- 确定生成脚本Demo:
public static string UIClass =
@"using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class #类名# : MonoBehaviour
{
#预设成员变量#
void Start()
{
#查找#
#事件#
}
#事件方法#
}"; - 根据选中准备好的预制体,准备并替换其中的‘#*#’内容:
string 类名;
string 成员变量;
string 查找成员;
string 事件;
string 事件方法;
public static void GetObjsDefintion(Transform tf)
{
类名 = tf.name+"Script";
if (tf != null)
{
for (int i = 0; i < tf.childCount; i++)
{
//根据命名格式筛选出所需要记录的成员
if (tf.GetChild(i).name.StartsWith("R_"))
{
if (tf.GetChild(i).name.EndsWith("_Text"))
{
//根据命名格式去逐个递归查找路径来查找每一个成员变量
成员变量 += "private Text " + name + ";\n ";
查找成员 += name + " = transform.Find(\"" + "递归查找路径" + "\").GetComponent<Text>(); \n ";
}
else if (tf.GetChild(i).name.EndsWith("_Button"))
{
//需要事件监听的Button等添加事件以及事件方法
事件 += name + ".onClick.AddListener("+name+"Listener);";
事件方法 += "private void "+name+"Listener(){}";
}else{
//别的需要的内容,此处省略一万行代码
}
}
if (tf.GetChild(i).childCount > 0 )
{
//递归遍历所有子物体
GetObjsDefintion(tf.GetChild(i));
}
}
}
}
string classStr = PrefabToScriptTemplate.UIViewClass;
classStr = classStr.Replace("#类名#", 类名);
classStr = classStr.Replace("#预设成员变量#", 成员变量);
classStr = classStr.Replace("#查找#", 查找成员);
classStr = classStr.Replace("#事件#", 事件);
classStr = classStr.Replace("#事件方法#", 事件方法); -
确定生成脚本的路径、并生成: string scriptPath = Application.dataPath + "/Scripts/" + 类名 + ".cs";
FileStream file = new FileStream(scriptPath, FileMode.CreateNew);
StreamWriter filew = new StreamWriter(file, System.Text.Encoding.UTF8);
filew.Write(classStr);
filew.Flush();
filew.Close();
file.Close();
链接: https://pan.baidu.com/s/1DRJyQhBNrwjoHZnpS51Wyg 提取码: q188
|