如何自动触发继承DatabaseTable类的数据库脚本生成?
自动化生成数据库脚本的实现思路
方案一:监听DatabaseTable子类的创建
- 基于Unity的
AssetPostprocessor类,重写OnPostprocessAllAssets方法,过滤出新增的C#脚本文件。 - 读取脚本文本内容,用字符串匹配或正则表达式(比如
public class \w+ :\s*DatabaseTable)判断是否为DatabaseTable的子类。 - 确认符合条件后,直接调用原MenuItem对应的静态生成函数——无需通过菜单点击,直接通过类名+方法名调用即可。
- 可维护一个已处理类的缓存列表(存在
EditorPrefs或本地文件),避免重复触发生成逻辑。
方案二:监听指定文件夹的脚本创建(处理默认继承问题)
- 同样依托
AssetPostprocessor,先判断新增脚本的路径是否在目标存放文件夹下。 - 对该文件夹下的新脚本,自动修正继承关系:用正则匹配替换默认的
MonoBehaviour为DatabaseTable,比如匹配:\s*MonoBehaviour替换成: DatabaseTable,兼容不同格式写法(如带访问修饰符、换行的情况)。 - 修改完成后调用
File.WriteAllText()保存脚本,再执行AssetDatabase.Refresh()确保Unity识别变更,之后触发生成函数。 - 额外判断:若脚本已为
DatabaseTable子类,直接跳过替换步骤,执行生成逻辑。
鲁棒性优化建议
- 增加异常捕获:解析或修改脚本时出错,在Console打印警告,避免Editor逻辑崩溃。
- 添加手动开关:用
EditorPrefs.SetBool("AutoGenerateDatabase", true)实现开关功能,方便调试时关闭自动化。 - 支持批量处理:一次导入多个脚本时,收集所有符合条件的类后一次性执行生成,提升效率。
内容的提问来源于stack exchange,提问作者Daniel
相关产品推荐
相关产品推荐

