[Unity]利用全局回调事件修改默认组件


起因是这样的,在更换了渲染管线之后,创建出来的SpriteRenderer的默认材质就和以前不一样了,在用ShaderGraph做了新的材质之后我发现个问题,那就是我要么新建一个就拖一次材质,要么一次性做一堆然后批量修改,再要么就自个儿在Menu菜单里面加一项,我这人比较懒,就想能不能在创建的时候就直接修改了,刚好今天参加了Unity成都站的技术交流日,线上咨询之后得到结果,可以使用 ObjectFactory.componentWasAdded 这个回调来实现我的需求.
从名字来看,componentWasAdded 简单翻译就是当一个组件被添加的时候,也就是说这个回调会在添加组件的时候触发,经过我的测试无论是在Hierarchy窗口创建带组件的物体还是给已有物体添加组件都会触发该回调.
接下来就是怎么用阶段.

首先我们需要新建一个类,然后引入 UnityEditor 这个名字空间,随便写一个函数,为其添加[InitializeOnLoadMethod]标签,这个标签的作用就是在编辑器初始化的时候执行修饰的函数,(对应类也有相应的标签)
这个函数只需要一个功能,那就是给componentWasAdded 添加回调,具体如图:

(由于我比较懒所以用的闭包和Resources加载
接下来创建一个新的物体

可以看到对应组件的材质已经被修改为指定的材质啦~

除了修改默认值,这个回调还可以实现一些别的有趣的功能,大家不妨试试看.
假装课后作业:
利用本文介绍的办法,实现将新创建的Button类修改为自定义Button类