Unity3D工程全资源自动检测系统
- 资源名字或路径不规范?
- 资源丢引用?
- 特效丢材质或贴图?
- 预设丢组件或脚本?
- 动作控制器丢动画?
- 等等很多各类美术程序资源引用的丢失都可检测到
- 文件有冲突?
- 典型的是meta冲突导致各种资源BUG
- 组件属性设置有误?
- 特效OrderInLayer不合适?
- UILabel层级不对?
- 用了不该用的组件或资源?
- 用了系统的材质/贴图/Shader?
- JSON填错导致格式挂掉了?
- Shader用了不兼容或不合适的语句?
- 资源性能数据不满足要求?
- 突然发现模型骨骼/面数/顶点数超了?
- 贴图大小或格式设置不对?
- 等等
- 策划测试发现资源有问题却不知该找谁?
- More!还有很多功能已有或可以很方便地扩展。
- 你可能需要定时或按心情来手动检测项目中某个路径或某种资源有什么问题
- 别的项目组想用你的类似工具,却要做很多的修改和合并。
- 为了新增加一个新的检测类型,你可能得修改很多原来的检测代码。
- 你可能得修改类文件来应付诸如“策划修改了某类资源的路径”或“策划增加了对某类资源的命名的检测”
- 你可能重载了很多 OnPostprocessAllAssets ,导致资源导入很慢,或经常不知道什么地方修改了资源导入的设置。
- 耦合性很低,直接拷贝对应的文件目录过来即可。
- 你可能需要修改下配置表,以增减或修改一些功能或路径来适应你的项目
- 默认会自动启用资源的自动检测,当然你也可以随时在编辑器界面或配置中关闭它
- 继承 AssetValidateBase
- 重载 bool OnAssetTypeCheck(string assetPath) 以判断是否是你要检测的资源类型
- 重载 bool OnAssetvalidate(string assetPath) 对资源进行你想要的检测
- 它是怎么捕获到资源的修改的
- 继承 Unity3D 的 AssetPostprocessor ,重载它的 OnPostprocessAllAssets
- 附上官网API说明
- 这样当有新增/修改/删除资源时你都可以 Hook 到,并进行自己的判断。
- 怎么不修改原来的代码来新增子校验器
- 把子校验器的类名配置到配置表中
- 通过反射来获取对应类名的校验器子类,执行其基类的相关方法即可
- 你可以查阅反射相关的API,也可以借鉴这段代码
- Assembly
- Type.GetType();
- CreateInstance
- 不同校验器需要的数据的数据结构不一样,如何不修改原代码来动态获取
- 这是通过JSON来实现的
- 编辑器下你可以用U3D自带的JSON处理类来处理JSON
- JsonUtility
- 如何知道某个GUID对应的资源是否存在?
- 你可以通过U3D的API,获取到对应GUID对应的Path,判断它是否为空,且文件存在,且不是默认资源,来判断这个资源是否存在。
- UnityEditor.AssetDatabase.GUIDToAssetPath()
- 这些路径为内置资源路径
- "Resources/unity_builtin_extra"
- "Library/"
- 如果通过这个API返回的路径为空,也可能是内置资源
- AssetDatabase.GetAssetOrScenePath
- 如何判断资源是否丢引用的
- 你可以通过读文本的方式读取资源的文本形式
- 这点很简单,但很有用,U3D很多资源都是有一定的格式的,包括meta文件等,善于利用这一点可以做很多事
- 再通过正则等方式匹配到资源的GUID/Type/Name/FileID等信息
- 你可能需要对C#正则表达式有一定的了解
- 送上解析资源文本中的绝大部分GUID等信息的正则表达式
- private const string REG_TO_MATCH_FILEDS = @"\s(?<FieldName>[a-zA-Z_]+?)(\s)*?\:(\s)*?-*(\s)*?\{(\s)*?fileID(\s)*?\:(\s)*?(?<FileID>[0-9]+?)(\s)*?\,(\s)*?guid(\s)*?\:(\s)*?(?<GUID>[a-zA-Z0-9]+?)(\s)*?\,(\s)*?type(\s)*?\:(\s)*?(?<Type>[0-9])(\s)*?\}";
- 再去校验这些GUID是否存在。
- 确实有很多细节,不论是功能实现,还是技术细节,限于篇幅,只能粗略提下了。
- 已实现且建议实现的功能包括但不限于:
- 你得把一次检测或监测到的问题记录到文本,方便查阅和修正
- 你得有个编辑器界面去很好地控制这个系统,包括但不限于控制整个系统及所有小校验器的开启和关闭。
- 你得很好地设计你的系统,让每个问题都绑定给对应的负责人(比如业务开发程序/引擎开发程序/动作美术/场景美术/特效美术/剧情策划/系统策划等)
- 需要注意,这个系统的核心是基于U3D资源库的文件的变动回调的,请尽量不要在系统中修改资源,否则可能跟你工程中其他对这个资源有修改的操作冲突,导致死循环。
- 也请知悉,刚用这类工具时,可能会检测出很多资源问题,这代表着,你可能会频繁去找很多其他组员或其他组的成员的问题,请保证你比他们强壮...
Unity3D工程全资源自动检测系统的更多相关文章
- QT国际化示例, 检测系统语言,设置适合语言,按键切换显示语言
1.效果如下图,开启就自动检测系统语言,选择系统语言显示, UI有控件设置,在中文和英文之间切换.. 2. 源码 dialog.h #ifndef DIALOG_H #define DIALOG_H ...
- Unity3D 创建动态的立方体图系统
Unity3D 创建动态的立方体图系统 这一篇主要是利用上一篇的Shader,通过脚本来完成一个动态的立方体图变化系统. 准备工作如下: 创建一个新的场景.一个球体.提供给场景一个平行光,准备2个立方 ...
- 开源入侵检测系统OSSEC搭建之二:客户端安装
上一篇文章中已经将OSSEC服务端的安装以及客户端的Key导出操作做了解说,接下来在另一台虚拟机中安装客户端,与安装服务端类似同样需要安装ossec,步骤如下. 一.下载ossec-hids-2.8. ...
- 开源入侵检测系统OSSEC搭建之一:服务端安装
OSSEC是一款开源的多平台的入侵检测系统,可以运行于Windows, Linux, OpenBSD/FreeBSD, 以及 MacOS等操作系统中.主要功能有日志分析.完整性检查.rootkit检测 ...
- 基于DSP的疲劳驾驶检测系统的研究
原地址:http://www.chinaaet.com/article/index.aspx?id=114534 关键词:疲劳检测DSP亮瞳效应PERCLOS 摘 要: 针对汽车驾驶员疲劳驾驶检测的 ...
- 谷歌发布基于机器学习的Android APP安全检测系统:Google Play Protect
Google Play作为众所周知的在线应用市场,因为审查制度的松散,经常会有一些恶意软件伪装成其他应用混入其中.此前阿里聚安全小编就报道了2例关于恶意软件伪装在Google Play上的事件:< ...
- 吴恩达机器学习笔记54-开发与评价一个异常检测系统及其与监督学习的对比(Developing and Evaluating an Anomaly Detection System and the Comparison to Supervised Learning)
一.开发与评价一个异常检测系统 异常检测算法是一个非监督学习算法,意味着我们无法根据结果变量
- 基于PySpark的网络服务异常检测系统 (四) Mysql与SparkSQL对接同步数据 kmeans算法计算预测异常
基于Django Restframework和Spark的异常检测系统,数据库为MySQL.Redis, 消息队列为Celery,分析服务为Spark SQL和Spark Mllib,使用kmeans ...
- SNORT入侵检测系统
SNORT入侵检测系统 YxWa · 2015/10/09 10:38 0x00 一条简单的规则 alert tcp 202.110.8.1 any -> 122.111.90.8 80 (ms ...
随机推荐
- C#调用免费天气预报WebService
using System; using System.Collections; using System.Configuration; using System.Data; using System. ...
- java实现安全证书相关操作
https://blog.csdn.net/zhushanzhi/article/details/77864516 版权声明:本文为博主原创文章,未经博主允许不得转载. package test; i ...
- [Spark Core] Spark 实现气温统计
0. 说明 聚合气温数据,聚合出 MAX . MIN . AVG 1. Spark Shell 实现 1.1 MAX 分步实现 # 加载文档 val rdd1 = sc.textFile(" ...
- dll动态链接库导出函数方法 -- 静态导出(__declspec前缀导出)
简介 在之前已经笔者已经写过利用.def文件进行dll函数动态导出的文章,那么今天就给大家介绍一下,如何利用**__declspec**函数前缀进行简单的静态函数导出. 要点 大家阅读过动态导出的文章 ...
- linux命令1—安装optimizer
ZendChina官方:下面介绍一下关于在linux环境下Zend Optimizer 3.3的安装方法.本篇文章是基于RHEL5架构的linux系统. (1)ZendOptimizer 3.3.3版 ...
- .后面是方法不加引号 ,后面是"名"要加引号
.后面是方法不加引号 ,后面是"名"要加引号
- 利用单例模式设计数据库连接Model类
之前在<[php]利用php的构造函数与析构函数编写Mysql数据库查询类>(点击打开链接)写过的Mysql数据库查询类还不够完美,利用<[Java]单例模式>(点击打开链接) ...
- 20165302 程上杰 Exp1 PC平台逆向破解
实验内容 手工修改可执行文件,改变程序执行流程,直接跳转到getShell函数. 利用foo函数的Bof漏洞,构造一个攻击输入字符串,覆盖返回地址,触发getShell函数. 注入一个自己制作的she ...
- 非阻塞 sleep
在OpenResty里面选择使用库的时候,有一个基本的原则:尽量使用ngx Lua的库函数,尽量不用Lua的库函数,因为Lua的库都是同步阻塞的. 再来一个例子来说明阻塞API的调用对nginx并发性 ...
- Python2.7-zlib
zlib 模块,提供了压缩和解压缩的函数,都是对字符串进行操作的,可以理解为是各种不同类型的数据经过处理成为字符串或是二进制字符串,再进行压缩解压缩.是和 gzip 相兼容的压缩模块 模块方法: zl ...