UGUI 下拉滚动框
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                UGUI 下拉滚动框
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.                        
                                開始制作好友系統(tǒng)了, 發(fā)現(xiàn)有一個(gè)UI跟QQ的面板一模一樣. 于是就寫了一個(gè)公共的下拉滾動(dòng)框.需要把按鈕的中心點(diǎn)(pivot.y = 1),描點(diǎn)為最上方 直接上圖吧
代碼如下:
using UnityEngine; using System.Collections; using UnityEngine.UI; using UnityEngine.EventSystems; using System.Collections.Generic; using UnityEngine.Events;public class DropScroll : MonoBehaviour {[SerializeField]private Button[] btnList; //提供多個(gè)按鈕private RectTransform thisRT;[SerializeField]private GameObject scrollViewTmp; //提供一個(gè)滾動(dòng)視圖模版private List<RectTransform> scrollViewList = new List<RectTransform>(); public void Start() {Init();}public void Init() {RectTransform rt = null;foreach (var btn in btnList){EventTriggerListener.Get(btn.gameObject).OnClick += BtnDropClickEvent;rt = GameObject.Instantiate(scrollViewTmp).GetComponent<RectTransform>();scrollViewList.Add(rt);rt.gameObject.SetActive(false);rt.transform.SetParent(this.transform,false);}thisRT = this.GetComponent<RectTransform>();}private void BtnDropClickEvent(GameObject go) {RectTransform rt = go.GetComponent<RectTransform>();RectTransform btnRt = null;float height = thisRT.sizeDelta.y;int index = rt.GetSiblingIndex();HideAllScrollView();scrollViewList[index].sizeDelta = new Vector2(thisRT.sizeDelta.x, height - btnList.Length * rt.sizeDelta.y);scrollViewList[index].anchoredPosition = new Vector2(0, -((index + 1) * rt.sizeDelta.y));scrollViewList[index].gameObject.SetActive(true);for (int i = 0; i < btnList.Length; i++){btnRt = btnList[i].GetComponent<RectTransform>();if (i > index){btnRt.anchoredPosition = new Vector2(btnRt.anchoredPosition.x, -height + ((btnList.Length - i) * btnRt.sizeDelta.y));}else {btnRt.anchoredPosition = new Vector2(btnRt.anchoredPosition.x, -(i * btnRt.sizeDelta.y));}}}private void HideAllScrollView() {for (int i = 0; i < scrollViewList.Count; i++){scrollViewList[i].gameObject.SetActive(false);}} }public class EventTriggerListener : UnityEngine.EventSystems.EventTrigger {public delegate void VoidDelegate(GameObject go);public event VoidDelegate OnClick;static public EventTriggerListener Get(GameObject go){EventTriggerListener listener = go.GetComponent<EventTriggerListener>();if (listener == null) listener = go.AddComponent<EventTriggerListener>();return listener;}public override void OnPointerClick(PointerEventData eventData){if (OnClick != null)OnClick(gameObject);} }?
層次圖:
轉(zhuǎn)載于:https://www.cnblogs.com/plateFace/p/5364026.html
總結(jié)
以上是生活随笔為你收集整理的UGUI 下拉滚动框的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 【转】SSL/TLS/WTLS协议原理
- 下一篇: 6大设计模式(4):接口隔离原则
