关于Unity中NGUI的Tab商城、Scrollview和打字机效果的实现

Tab商城实例

UIToggle 和 UIToggledObjects+ Box Collider(实现商城功能必备)

1.创建两个个UI Sprite,Sprite1和Sprite2

2.给Sprite1和Sprite2都添加UI Toggle组件和UI Toggled Objects组件,设置UI Toggle组件中的Group值一样,归为同一组,这样只能有一个被选择,就像男女只能选一个,再勾选Sprite1的Toggle组件的Starting State,设置为默认的Tab

3.再给Sprite1和Sprite2创建一个Label子节点,使用Unity字体,mysh字模。上面写菜单的名字

4.再给Sprite1和Sprite2添加碰撞器组件NGUI---->Attach---->Collider和按钮效果组件Button offset和Button scale

5.当鼠标经过这两个菜单时,会变大(Button scale),按下去的时候会偏移一小段距离(Button offset)

6.创建两个空节点Content1和Content2下面各带一个UI Label,写上道具Tab和坐骑Tab,再在Content1和Content2下面各带一个UI Sprite当作背景,调节Label的Z序Depth---->Forward,显示在背景前面

7.设置Sprite1的UI Toggled Objects组件里面的Activate属性,Size为1,然后把Content1拖到Element0中,Content2同理关联到Sprite2的UI Toggled Objects组件里面的Activate属性。

8.然后运行就可以看见,当鼠标点击道具时显示道具Tab面板,当鼠标点击坐骑时显示坐骑Tab面板

  

9.给Tab切换增加音效,给Sprite1和Sprite2添加音效组件Play Sound,关联好音效资源到Audio Clip

10.其实它控制的只是Content是否激活,点击其中一个就激活它并隐藏其他的Content

ScrollView滚动视图实例

ScrollView滚动视图,基于UIPanel实现 (实现商城功能必备)

1.创建一个Widget(所有NGUI控件的父类),NGUI---->Create---->Widget,把Sprite1和Sprite2、Content1和Content2一起放在Widget类型的Container节点下

2.再创建一个Widget,下面创建一个Scroll View控件子节点NGUI---->Create---->Scroll View,在Scroll View子节点下面再创建一个Grid控件子节点NGUI---->Create---->Grid,给Scroll View设置一个锚点可以让它和UI Root比例一样大

3.UI Grid是一个自动布局的工具,在Grid节点下再创建几个Sprite子节点,调整Grid的Cell Width和Cell Height可以改变每个Sprite子节点之间的间距

4.给Grid添加一个UI Center On Child组件,让它的孩子节点必须居中显示,有一些商城无论怎么滚动都是居中显示,就是用了这个组件,不会出现下面的拖动到一半道具图片停下来被分成两半的现象

5.给每一个Sprite子节点都加上Box Collider组件NGUI---->Attach---->Collider和Drag Scroll View组件,并且把父节点的父节点Scroll View拖进每个Sprite的Drag Scroll View组件的Scroll View属性中,变得可以拖动

6.再给每一个Sprite子节点都加上UI Center On Click组件,当点击两侧的时候也会跳转到前面一个或者后面一个的Sprite

7.选择Grid节点的UI Grid组件右上角设置的Excute执行脚本,让它帮我们自动排版Sprite

8.可以设置Scroll View节点的大小,来调节显示窗口,Scroll View越大,显示的道具图片越多

Tab商城和ScrollView滚动视图的组合

1.把整个Scroll View节点拖到Tab商城的Content1和Content2下作为子节点,再调整好位置,就可以实现组合效果

2.效果

3.后面可以把一个一个的Sprite做成Button,触发购买,跳出购买弹窗的事件

UI Center On Click组件代码

public class UICenterOnClick : MonoBehaviour
{
    void OnClick ()
    {
        UICenterOnChild center = NGUITools.FindInParents<UICenterOnChild>(gameObject);//从所有父节点中找到UI CenterOnChild组件
        UIPanel panel = NGUITools.FindInParents<UIPanel>(gameObject);//从所有父节点中找到UI Panel组件

        if (center != null)
        {
            if (center.enabled)
                center.CenterOn(transform);
        }
        else if (panel != null && panel.clipping != UIDrawCall.Clipping.None)
        {
            UIScrollView sv = panel.GetComponent<UIScrollView>();
            Vector3 offset = -panel.cachedTransform.InverseTransformPoint(transform.position);
            if (!sv.canMoveHorizontally) offset.x = panel.cachedTransform.localPosition.x;//在X方向上做一些偏移
            if (!sv.canMoveVertically) offset.y = panel.cachedTransform.localPosition.y;//在Y方向上做一些偏移
            SpringPanel.Begin(panel.cachedGameObject, offset, 6f);//开始偏移
        }
    }
}

打字机效果实例

UILabel 和 TypewriterEffect(游戏中的新手引导或人物的对话功能中)

1.创建一个UI Label,NGUI---->Create---->Label

2.添加Typewriter Effect组件,Char Per Second是打字机打字速度,Delay On Period每个周期之间延迟多少,Delay On NewLine每一行字之间延迟多少,Keep Full Dimension保持行的位置不会因为换行而移动。

原文地址:https://www.cnblogs.com/HangZhe/p/7446381.html