之前看到了Uniflow的工具,但是不会使用,只知道Uniflow其实是一个图片浏览工具,所以就在网上找了一下关于uniflow 插件怎么用的相关文章。

uniflow 插件怎么用

看到这个效果,起初就觉得很神奇(在2D camera的情况下实现)。一直都想知道在2D的情况下如何实现图片的变形,如上图的图片的透视效果——图片一头大,一头小。所以一开始看到这个效果非常兴奋,还以为让我找到了。看了下代码就非常失望,其实Uniflow实现的原理很简单:camera的 Projection 为 Perspetive 这样通过旋转图片的角度和位移就会呈现这个效果了。

Uniflow主要是实现一套管理机制:实现图片左移,右移,居中,放大四种效果。
C#代码  
  1. public enum EThumbnailFlippingAnimation
  2. {
  3. Left,
  4. Centered,
  5. Right,
  6. Zoom
  7. };

本来就可以打住了,但为了使自己的学习发挥到最大作用,还是做下分享(很久没有写Blog了)。

                     uniflow 插件怎么用

Uniflow的源码的目录结构很简单,下面分别介绍下每个类的作用:
--ClickManager:鼠标事件管理器
--ClickEventManager.cs:自定义事件的触发器,看过NGUI的UICamera就知道,这个脚本的就是这个功能——在Update中检测当前鼠标的状态,然后通过SendMessage触发事件:
C#代码  
  1. if( m_rFirstPressedCollider != rCollidedElement )
  2. {
  3. rCollidedElement.SendMessage( "OnHoverEvent", true, SendMessageOptions.DontRequireReceiver );
  4. m_rPreviousHoveredCollider = rCollidedElement;
  5. }
--IClickEventListener:定义了两个事件监听器类型(函数):
C#代码 
  1. public interface IClickEventListener
  2. {
  3. void OnClickEvent( );
  4. void OnHoverEvent( bool a_bIsHovered );
  5. }
--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定义的四种效果的实现:

C#代码  
  1.  // Animates/flips the thumbnail.
  2. // Animation can be skipped if a_bForceEndOfAnimation set to true
  3. public void Flip( EThumbnailFlippingAnimation a_eFlippingAnimation, bool a_bForceEndOfAnimation )
  4. {
  5. m_rUIEffectFlipping.Pause( );
  6. m_rUIEffectColorFade.Pause( );
  7. if( m_bIsZoomed == false )
  8. {
  9. switch( a_eFlippingAnimation )
  10. {
  11. case EThumbnailFlippingAnimation.Left:
  12. {
  13. m_rUIEffectFlipping.finalEulerAnglesOffset = m_rParentGallery.leftFlippingRotation;
  14. m_rUIEffectFlipping.finalScaleOffset       = m_rParentGallery.leftFlippingScale * Vector3.one;
  15. m_rUIEffectFlipping.finalPositionOffset    = m_rParentGallery.leftFlippingPosition;
  16. m_rUIEffectColorFade.colorIn = m_rUIEffectColorFade.currentColor;
  17. m_rUIEffectColorFade.colorOut = m_rParentGallery.ambientColor;
  18. }
  19. break;
  20. //省略其他实现,具体可以查看代码
  21. }
  22. }
  23. }
--UniflowUtils.cs:工具类
--UniflowZoomBackground.cs:背景图片的效果的实现类。
--Shaders:图片使用的shader,定义变量
--shader_TransparentVertexLitOverlayP1.shader:

--shader_TransparentVertexLitOverlayP2.shader:

小结:

其实原理很简单,但是要想有一个好的管理还是需要额外做很多工作的。要不然也不会有Uniflow,虽然没有学到自己想要的,但是Uniflow的代码组织还是有很多借鉴的。

因为之前一直有事,抽不开身,有很多要写的博客都落下了,希望以后可以给自己更多时间,更多的成长。