uniflow 插件怎么用
之前了解到了Uniflow工具,但不太清楚如何使用。只知道Uniflow实际上是一个图片浏览工具,于是在网上查找了关于“uniflow插件怎么用”的相关文章。
起初看到在2D camera情况下实现的效果时,觉得十分神奇。一直以来,我都想知道在2D场景下如何实现图片的变形,比如图片呈现一头大一头小的透视效果。所以一开始看到这个效果时很兴奋,还以为找到了实现方法。然而,查看代码后却感到失望,因为Uniflow实现该效果的原理很简单:只需将camera的Projection设置为Perspective,通过旋转图片的角度和位移就能呈现这种效果。
Uniflow主要实现了一套管理机制,包括图片左移、右移、居中、放大四种效果。以下是相关的C#代码:
public enum EThumbnailFlippingAnimation
{
Left,
Centered,
Right,
Zoom
};
虽然了解到这里本可以停止研究,但为了让自己的学习更有价值,还是决定做个分享(我很久没写博客了)。
Uniflow的源码目录结构较为简单,下面分别介绍每个类的作用:
- ClickManager:鼠标事件管理器。
- ClickEventManager.cs:自定义事件的触发器。熟悉NGUI的UICamera就会知道,这个脚本的功能是在Update中检测当前鼠标的状态,然后通过SendMessage触发事件,示例代码如下:
if( m_rFirstPressedCollider != rCollidedElement ) { rCollidedElement.SendMessage( "OnHoverEvent", true, SendMessageOptions.DontRequireReceiver ); m_rPreviousHoveredCollider = rCollidedElement; } - IClickEventListener:定义了两个事件监听器类型(函数),代码如下:
public interface IClickEventListener { void OnClickEvent( ); void OnHoverEvent( bool a_bIsHovered ); } - UIEffect:UI效果。
- gkInterpolate.cs:定义了一些缓动函数,对缓动感兴趣的读者可以深入研究更多缓动函数的实现。
- UIEffectColor.cs:继承自UIEffectTemplate,重写了EffectUpdate函数,实现颜色的变化,通过更改Shader的color参数值来达成。
- UIEffectTemplate.cs:动画的实现类,类似于NGUI的UITweener。
- UIEffectTransformRelativeCoords.cs:实现Scale、Rotation、Position的动画。
- Uniflow:图片浏览器的实现。
- UniflowGallery.cs:对UniflowThumbnail的管理类,定义了图片之间的参数。
- UniflowThumbnail.cs:实现了EThumbnailFlippingAnimation定义的四种效果,以下是部分代码示例:
// Animates/flips the thumbnail. // Animation can be skipped if a_bForceEndOfAnimation set to true public void Flip( EThumbnailFlippingAnimation a_eFlippingAnimation, bool a_bForceEndOfAnimation ) { m_rUIEffectFlipping.Pause( ); m_rUIEffectColorFade.Pause( ); if( m_bIsZoomed == false ) { switch( a_eFlippingAnimation ) { case EThumbnailFlippingAnimation.Left: { m_rUIEffectFlipping.finalEulerAnglesOffset = m_rParentGallery.leftFlippingRotation; m_rUIEffectFlipping.finalScaleOffset = m_rParentGallery.leftFlippingScale * Vector3.one; m_rUIEffectFlipping.finalPositionOffset = m_rParentGallery.leftFlippingPosition; m_rUIEffectColorFade.colorIn = m_rUIEffectColorFade.currentColor; m_rUIEffectColorFade.colorOut = m_rParentGallery.ambientColor; } break; // 省略其他实现,具体可以查看代码 } } } - UniflowUtils.cs:工具类。
- UniflowZoomBackground.cs:背景图片效果的实现类。
- Shaders:图片使用的shader,定义了变量,包含以下两个shader文件:
- shader_TransparentVertexLitOverlayP1.shader
- shader_TransparentVertexLitOverlayP2.shader
小结
Uniflow实现效果的原理其实很简单,但要实现良好的管理则需要额外做很多工作,这也是Uniflow存在的意义。虽然我没有学到自己想要的内容,但Uniflow的代码组织有很多值得借鉴的地方。
由于之前一直事务繁忙,很多想写的博客都搁置了,希望以后能给自己更多时间,实现更多的成长。