//初始化 public void Init() { if (itemsLoop.Count < 3) { return; } //滑动 gameObject.GetComponent <Image>().color = new Color(0, 0, 0, 1 / 255f); sizeDelta = GetComponent <RectTransform>().sizeDelta; GetComponent <RectTransform>().sizeDelta = sizeDelta; EventTriggerListener.Get(gameObject).onDragStart = DragStart; EventTriggerListener.Get(gameObject).onDrag = Dragging; EventTriggerListener.Get(gameObject).onEndDrag = DragEnd; //位置 for (int i = 0; i < cacheCount; i++) { Image ima = new GameObject("Item").AddComponent <Image>(); ima.color = Color.white; ima.transform.SetParent(transform); ima.transform.localScale = Vector3.one; ima.GetComponent <RectTransform>().sizeDelta = sizeDelta; ima.transform.localPosition = new Vector3(-sizeDelta.x + sizeDelta.x * i, 0, 0); ItemLoop item = ima.gameObject.AddComponent <ItemLoop>(); item.ima = ima; item.btn = item.gameObject.AddComponent <Button>(); item.btn.onClick.AddListener(delegate() { ClickImage(item.gameObject); }); loopImages.Add(item); } loopImages[0].ima.sprite = itemsLoop[itemsLoop.Count - 1]; loopImages[1].ima.sprite = itemsLoop[0]; loopImages[2].ima.sprite = itemsLoop[1]; loopImages[0].imageIndex = itemsLoop.Count - 1; loopImages[1].imageIndex = 0; loopImages[2].imageIndex = 1; }
//点击图片 void ClickImage(GameObject o) { ItemLoop item = o.GetComponent <ItemLoop>(); Debug.Log(item.imageIndex); }
void Dragging(GameObject o) { Vector3 addPos = Input.mousePosition - curInputPos; curInputPos = Input.mousePosition; for (int i = 0; i < cacheCount; i++) { loopImages[i].transform.localPosition += new Vector3(addPos.x, 0, 0); } //最左边的越界就调到右边去 float maxPosX = sizeDelta.x * 1.5f; bool needChangeLeft = loopImages[0].transform.localPosition.x < -maxPosX; if (needChangeLeft) { //记录 curIndex++; if (curIndex > 2) { curIndex = 0; } //调位置 loopImages[0].transform.localPosition = loopImages[2].transform.localPosition + new Vector3(sizeDelta.x, 0, 0); //刷新数据 int index = loopImages[2].imageIndex + 1; if (index > itemsLoop.Count - 1) { index = 0; } loopImages[0].imageIndex = index; loopImages[0].ima.sprite = itemsLoop[index]; Debug.Log(index); //调整List下标 ItemLoop item0 = loopImages[0]; ItemLoop item1 = loopImages[1]; ItemLoop item2 = loopImages[2]; loopImages[2] = item0; loopImages[1] = item2; loopImages[0] = item1; Debug.Log("curIndex = " + curIndex); } //最右边的越界就跳到左边去 bool needChangeRight = loopImages[2].transform.localPosition.x > maxPosX; if (needChangeRight) { curIndex--; if (curIndex < 0) { curIndex = 2; } loopImages[2].transform.localPosition = loopImages[0].transform.localPosition - new Vector3(sizeDelta.x, 0, 0); int index = loopImages[0].imageIndex - 1; if (index < 0) { index = itemsLoop.Count - 1; } loopImages[2].imageIndex = index; loopImages[2].ima.sprite = itemsLoop[index]; ItemLoop item0 = loopImages[0]; ItemLoop item1 = loopImages[1]; ItemLoop item2 = loopImages[2]; loopImages[0] = item2; loopImages[1] = item0; loopImages[2] = item1; Debug.Log("curIndex = " + curIndex); } }