当前位置:   article > 正文

unity 创建图片ui_UI 增加材质动画机制

unity动画系统控制ui材质参数

(声明:本文章所有用到的图片和源码,只为了学习和研究用途,未经我同意,不得进行转载或者其他用途,否则自行承担所有法律后果,郑重推荐大家购买Unity正版源码

1.问题原因

在正常的Renderer下(或者继承于Renderer的)下,大家做材质动画是比较方便的,如下:

a14d36b6ca2d97ffe0f03eca15d5e56b.png

这个就是个很简单的例子,shader的属性在你Add Pr也都会列在animation这里, 你只要点 + 就行了,比如这个_TestColor

30259ea4dd85cbf2eb0c497330b55861.png

但是,在UI这里,由于现在UI是以package存在的,其实引擎里只有基本的canvas, canvasrender, canvasmanager几个类,具体的实现都是在外面的包里,其实都是monobehavior

4b3add4fe2aa31c616b3917960608c75.png

,这里就只能看到Material, 但是这个只是作为一个普通的属性存在的,不没有具体的属性可以操作。这样就比较蛋疼,UI如果要做材质动画就不好做了。

2. Unity的绑定机制

unity有属性的generic的绑定,当然也有自定义的绑定,大家可以参见RuntimeGraphicsRendererAnimationBinding.cpp,基本比较清楚了,(另外还有一堆xxxRendererAnimationBinding,MonoBehaviourAnimationBinding)他里面有一般的绑定,材质的绑定,还有自己定义的几个属性的绑定,大家基本照着抄

就可以。几个注意的点

1.如果是新的绑定类型,则需要到ModulesAnimationBoundCurve.h 加一个enum值,一个类可以有多个enum,但是一个enum值只能对一个类,不然报错,几个主要的虚函数大家可以看下。

2.要加的属性,是绑定的Object的属性,不然不能自动数值修改传递

3.unity有个绑定属性的注册机制,可以参看 EditorSrcAnimationAnimationModeSnapshot.cpp这个文件,一些额外的属性,需要在bool AnimationModeSnapshot::AddPropertyModificationForExceptions 加上,自己看例子抄。

注册可以看 GetDrivenPropertyManager().RegisterPropertyModification函数。如果不注册绑定,你在重启unity后,你的这个以前做的animation和GO的绑定,unity是不认识的,你要重新生成新的animation.

由于unity UI的实现机制,它的UI控件其实都是MonoBehavior,我们能集中处理的地方就是在canvasrender里面(其实都是往这里设置的,texture,mesh,material等),但是由于我们修改的属性不是canvasrender本身的,

所以并不能直接进行modifiedproperty的传递,所以我这里其实是做了一个转接。

大家看RendererAnimationBinding,它在用材质的时候,是有一个变量的。ShaderPropertySheet* m_RendererProperties; 这个变量在我看来,是个animation变化过程中值的一个cache的地方,getfloat和setfloat都作用在这个变量上,

这个变量大家可以看到,其实是material的属性的容器,mat→GetProperties()返回的就是这个类型的变量,当然大家也可以另外的做法。

我最初就是看到数据动了,但是就是不能反应到实际的mat上的变化。后来我桥接了下,直接去设置对应mat的数据了(最原先去copy ShaderPropertySheet 不行,还是直接设置好,会标记修改),大致代码如下:

(有Unity源码的部分我就不贴了)

这里其实抄了下GetFloat函数里的东西,取出它设置好的值,然后拿来设置到目标mat, 细节e问题可以自己尝试下。 这样目前测试下来基本可以,也支持Hdrcolor。

其实整个的绑定的东西,流程等还是挺杂乱的,如果大家有好的方法,可以一起讨论。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/122539
推荐阅读
相关标签
  

闽ICP备14008679号