1. 程式人生 > >NGUI實現圖片左右無限滾動

NGUI實現圖片左右無限滾動

開發專案的時候,通常要左右移動圖片選擇對應的場景或者關卡等等的,下面程式碼使用到了NGUI裡面的Tweenpositi,做了註釋,應該很容易看懂的

using UnityEngine;
using System.Collections;

public class Test : MonoBehaviour {
    public Transform[] sprites;
    /// <summary>
    /// 兩張圖片想個的距離
    /// </summary>
    public float distance;
    /// <summary>
    /// 從左往右,螢幕中間圖片的序號作為開始序號
    /// </summary>
    public int startNum;
    /// <summary>
    /// 當前選中的圖片序號
    /// </summary>
    int chooseNum;

    TweenPosition tweenMove;
	// Use this for initialization
	void Start () {
        chooseNum = startNum;
        SetSpritePosition(startNum);
        tweenMove = this.GetComponent<TweenPosition>();
	}

    int chooseState = 0;//向右-1,沒選0,向左1
	// Update is called once per frame
	void Update () {
        //往左移
        if (Input.GetKeyDown(KeyCode.F))
        {
            chooseState = 1;
            chooseNum++;
            if (chooseNum >= sprites.Length)
            {
                chooseNum = 0;
            }
            tweenMove.to = new Vector3(-distance, 0, 0);
            tweenMove.tweenFactor = 0;
            tweenMove.PlayForward();
        }
        //往右移
        if (Input.GetKeyDown(KeyCode.A))
        {
            chooseState = -1;
            chooseNum--;
            if (chooseNum < 0)
            {
                chooseNum = sprites.Length;
            }
            tweenMove.to = new Vector3(distance, 0, 0);
            tweenMove.tweenFactor = 0;
            tweenMove.PlayForward();
        }
        if ((chooseState == 1 || chooseState == -1)&&
            tweenMove.tweenFactor >= 1f)
        {
            
            transform.localPosition = Vector3.zero;
            SetSpritePosition(chooseNum);

        }
        
	}

    void SetSpritePosition(int num)//輸入選中位置,進行圖片位置歸位
    {
        for (int i = 0; i < sprites.Length; i++)
        {
            int gap = i - num;
            if (gap > (sprites.Length-3))
            {
                gap = gap - sprites.Length; 
            }
            if (gap < -(sprites.Length - 3))
            {
                gap = gap + sprites.Length;
            }
            if (gap <= 2 && gap >= -2)
            {
                sprites[i].localPosition = new Vector3(gap * distance, sprites[i].localPosition.y, sprites[i].localPosition.z);
            }
            else { 
                sprites[i].localPosition = new Vector3(3f * distance, sprites[i].localPosition.y, sprites[i].localPosition.z);
            }
        }

    }

}