unity 多个模型或物体无限循环拖拽 类似无限列表循环
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class ModelAnimal : MonoBehaviour
{
//需滑动的物体
public GameObject m_objA; //音乐
public GameObject m_objB; //电话
public GameObject m_objC; //导航
public GameObject m_objD; //设置
public GameObject m_objE; //健康
//记录鼠标滑动
Vector2 lastPos;//鼠标上次位置
Vector2 currPos;//鼠标当前位置
Vector2 offset;//两次位置的偏移值
//实例化
public static ModelAnimal instance;
private void Awake()
{
instance = this;
}
void Update()
{
}
/// <summary>
/// 拖拽事件
/// </summary>
public void DragModel()
{if (Input.GetMouseButtonDown(0)){lastPos = Input.mousePosition;}if (Input.GetMouseButtonUp(0)){currPos = Input.mousePosition;offset = currPos - lastPos;DoMatch(offset);}
}
/// <summary>
/// 鼠标左滑事件
/// </summary>
public void AnimatorMoveLeft()
{GameObject[] objArry = { m_objA, m_objB, m_objC, m_objD, m_objE };Vector3[] vertices = new Vector3[] //顶点列表的变量{m_objA.transform.localPosition, //加入A点坐标(1.1, -1.3, 6.7)m_objB.transform.localPosition, //加入B点坐标(-4.2, -3.2, 16.8)m_objC.transform.localPosition, //加入C点坐标(-15.2, -3.0, 17.7)m_objD.transform.localPosition, //加入D点坐标(-23.3, -1.2, 5.1)m_objE.transform.localPosition, //加入E点坐标(-10.1, -0.3, -3.9)};Vector3 finalPos = objArry[objArry.Length - 1].transform.localPosition;for (int i = objArry.Length - 1; i >= 0; i--){if (1 <= i){objArry[i].transform.localPosition = objArry[i - 1].transform.localPosition;}else if (0 == i){objArry[i].transform.localPosition = finalPos;}}
}
/// <summary>
/// 鼠标右滑事件
/// </summary>
public void AnimatorMoveRight()
{GameObject[] objArry = { m_objA, m_objB, m_objC, m_objD, m_objE };Vector3[] vertices = new Vector3[] //顶点列表的变量{m_objA.transform.localPosition, //加入A点坐标(1.1, -1.3, 6.7)m_objB.transform.localPosition, //加入B点坐标(-4.2, -3.2, 16.8)m_objC.transform.localPosition, //加入C点坐标(-15.2, -3.0, 17.7)m_objD.transform.localPosition, //加入D点坐标(-23.3, -1.2, 5.1)m_objE.transform.localPosition, //加入E点坐标(-10.1, -0.3, -3.9)};Vector3 Lastpos = objArry[0].transform.localPosition;for (int i = 0; i <= objArry.Length - 1; i++){if (i < objArry.Length - 1){objArry[i].transform.localPosition = objArry[i + 1].transform.localPosition;}else if (i == objArry.Length - 1){objArry[i].transform.localPosition = Lastpos;}}
}
/// <summary>
/// 移动方向判断
/// </summary>
/// <param name="_offset"></param>
void DoMatch(Vector2 _offset)
{//水平移动if (Mathf.Abs(offset.x) > Mathf.Abs(offset.y)){if (offset.x > 0){Debug.Log("右");AnimatorMoveRight();}else{Debug.Log("左");AnimatorMoveLeft();}}else//垂直移动{if (offset.y > 0){Debug.Log("上");}else{Debug.Log("下");}}
}
}