unity滚动层dotween移动到指定索引

来源:互联网 发布:linux运维基础知识 编辑:程序博客网 时间:2024/06/04 19:16
using UnityEngine;using System.Collections;using UnityEngine.UI;using DG.Tweening;public enum ScrollLayoutType{    Grid,    Vertical}public class ScrollToItem : MonoBehaviour {    public ScrollLayoutType m_type = ScrollLayoutType.Grid;    public RectTransform m_content;    public RectTransform m_view;    [SerializeField] float m_cellY;    // Use this for initialization    void Start()    {        NotificationCenter.Get().ObjAddEventListener(KEventKey.m_evScrollToItem, gameObject, OnEventScroll);    }    private void OnDestroy()    {        NotificationCenter.Get().ObjRemoveEventListener(KEventKey.m_evScrollToItem, gameObject);    }    void OnEventScroll(Notification noti)    {        int idx = (int)noti.param;        switch (m_type)        {            case ScrollLayoutType.Grid:                ScrolllToIdx(idx);                break;            case ScrollLayoutType.Vertical:                ScrollToIdxVertical(idx);                break;            default:                break;        }    }    void ScrolllToIdx(int idx)    {        float length = idx * (m_content.GetComponent<GridLayoutGroup>().cellSize.y + m_content.GetComponent<GridLayoutGroup>().spacing.y);        float ViewProtH = m_content.childCount * (m_content.GetComponent<GridLayoutGroup>().cellSize.y + m_content.GetComponent<GridLayoutGroup>().spacing.y) - m_view.sizeDelta.y - m_content.GetComponent<GridLayoutGroup>().spacing.y;        if (length > ViewProtH)        {            length = ViewProtH;        }        DOTween.To(() => m_content.offsetMax, x => m_content.offsetMax = x, new Vector2(0, length), 0.5f);    }    void ScrollToIdxVertical(int idx)    {        float length = idx * (m_cellY + m_content.GetComponent<VerticalLayoutGroup>().spacing);        float ViewProtH = m_content.childCount * (m_cellY + m_content.GetComponent<VerticalLayoutGroup>().spacing) - m_view.sizeDelta.y - m_content.GetComponent<VerticalLayoutGroup>().spacing ;        if (length > ViewProtH)        {            length = ViewProtH;        }        DOTween.To(() => m_content.localPosition, x => m_content.localPosition = x, new Vector3(0,length,0), 0.5f);    }}