NGUI实现图片左右无限滚动

本文介绍了一个使用Unity和NGUI实现的简单图片切换系统。该系统通过键盘按键控制图片在水平方向上的移动,实现不同图片间的切换。代码中详细解释了如何设置初始位置、移动图片以及处理边界情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

开发项目的时候,通常要左右移动图片选择对应的场景或者关卡等等的,下面代码使用到了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);
            }
        }

    }

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值