uniflow 插件怎么用

2015年01月31日 09:46 0 点赞 1 评论 更新于 2025-11-21 15:47

之前了解到了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的代码组织有很多值得借鉴的地方。

由于之前一直事务繁忙,很多想写的博客都搁置了,希望以后能给自己更多时间,实现更多的成长。

作者信息

feifeila

feifeila

共发布了 3994 篇文章