NGUI的ScrollView平滑移动到指定位置

最近在学习NGUI的过程中,在试着模仿保卫萝卜的界面,其中在选择关卡、帮助、选择模式等界面都出现了一个相似的处理:拖拽当前的物体,检测到拖拽左右移动,下一个应当出现的物体会缓慢滑动出现在视野中央。我也感觉自己表达不是特别清晰。。例如:当前视野中央是A物体,向左拖拽A物体,A和即将出现的B物体会同时向左滑动,直到B物体出现在视野中央。

在NGUI里面可以实现拖拽,但是并不完全符合我需要的功能,于是我就果断创建了一个新的脚本开始的编辑。首先要检测是向左拖拽还是向右拖拽,然后就是整体向下一个位置的移动。在其中我发现没办法记录当前的状态,于是我添加了一个枚举NowShow的变量show,每次检测到移动就改变当前的show的状态,在Update里面就一直检测show的状态来让ScrollView平滑移动到目标位置。下面是代码,仅供借鉴!有其他解决方案的话也希望可以告诉我下喽!

using UnityEngine;
using System.Collections;

public class ChangeScrollView : MonoBehaviour {

    bool isButtonDown = false;
    float translateX;
    float mouseDownPostionX;
    enum NowShow
    {
        pic1,
        pic2,
        pic3,
        pic4
    }
    NowShow show = NowShow.pic1;

    void Start()
    {
        translateX = transform.FindChild("Grid").GetComponent<UIGrid>().cellWidth;
    }

    void Update()
    {
        if((!isButtonDown)&&Input.GetMouseButtonDown(0))
        {
            isButtonDown = true;
            mouseDownPostionX = transform.localPosition.x;
        }
        if(Input.GetMouseButtonUp(0))
        {
            if (mouseDownPostionX < transform.localPosition.x)
            {
                ShowRight();
            }
            else if (mouseDownPostionX > transform.localPosition.x)
            {
                ShowLeft();
            }
            isButtonDown = false;
        }
        if (!isButtonDown)
        {
            UpdatePic();

        }
    }
    /// <summary>
    /// 移动位置到中间
    /// </summary>
    void UpdatePic()
    {
        int i=(int)show;
       // float x = -translateX * i;
        float x = Mathf.Lerp(transform.localPosition.x, -translateX * i,Time.deltaTime*15);
        //GetComponent<UIPanel>().clipOffset = new Vector2(-x,GetComponent<UIPanel>().clipOffset.y);
        transform.localPosition = new Vector3(x, transform.localPosition.y, transform.localPosition.z);
        GetComponent<UIPanel>().clipOffset = new Vector2(-x,GetComponent<UIPanel>().clipOffset.y);
    }
    /// <summary>
    /// 向右移动
    /// </summary>
    void ShowRight()
    {
        if(show!= NowShow.pic1)
        {
            show--;
        }
    }
    /// <summary>
    /// 向左移动
    /// </summary>
    void ShowLeft()
    {
        if (show != NowShow.pic4)
        {
            show++;
        }
    }
}
本脚本放在新建的scrollview上面,推荐添加一个子物体Grid,将scrollview里面的子物体放在Grid里面(子物体的长宽就全部是Grid里面设置的值了),子物体必须添加BoxCollider和UIDrawScrollView。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值