close

關於限循環選單:

概念:先決定是左右或上下滑動,當ScrollView的內容軸心點超出一定範圍,如果往上在內容底下第一個項目移到最後,反之最後一個項目移到最前面,形成無限循環

前置動作:由於要以內容軸心點的距離來判定項目是否更動,所以在設置ScrollView的時候,先把內容軸心(Pivot)置前置中 

這樣都差不多準備好了,再來就是Coding~

一、參數設置

1、Direction                       要先決定是要左右滑動還是上下,所以在enum那做兩個選項

2、m_ItemCount                內容底下項目總數

3、ItemPrefab                    項目參考物件(生成用)

4、direction                        Direction變數(決定左右或上下)

5、m_fSpace                       項目之間的間隔

6、m_IsSetuped                  前置設定是否完成

7.   Items                              LinkedList(這裡我做記錄用,沒用也沒關係)

8、m_RectTransform           內容的RectTransform

9、anchoredPosition           依上下或左右來判定需要記錄的軸向

10、diffPreFramePosition    紀錄上一次的內容移動距離(來做一幀距離的變化紀錄)

11、currentItemNo              要補的項目長度或寬度的距離差

12、ItemScale                      依上下或左右來決定是要看項目的長度還是寬度

其實這些就是要拿來決定背內容移出去的項目要移往的位置,像是下圖

用向上滑動為例,內容軸心點超過所設定的範圍,第一個項目就往((項目寬度+間隔距離)*項目總數 * 之前往上移動掉的項目數)的距離移動其y轴

二、初始設定

這裡一個重點是ScrollRect的movementType要設為ScrollRect.MovementType.Unrestricted,其他就是做ScrollRect的參數設定和項目生成及排列

三、移動項目

由於一幀裡面有可能會移動數個項目,所以在這裡用while做迴圈去做項目移動,然後就如參數設置時所說:

如果向上滑動,內容軸心點超過所設定的範圍,第一個項目就往((項目寬度+間隔距離)*項目總數 * 往上移動掉的項目數)的距離去移動 

如果向下滑動,內容軸心點超過所設定的範圍,最後一個項目就往((項目寬度+間隔距離) * 往上移動掉的項目數)的距離去移動

四、完整程式碼

LoopScrollMenu.cs (放在內容物件ScrollView底下的Content)

Item.cs

參考:UnityのuGUIで無限にスクロール出来るスクロールビューを作る

arrow
arrow
    文章標籤
    Unity C# Script uGUI
    全站熱搜

    Kouhei 發表在 痞客邦 留言(1) 人氣()