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