關於限循環選單:
概念:先決定是左右或上下滑動,當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