[英]How can I move item from end of list to the start?
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class MoveObjects : MonoBehaviour
{
public float speed = 3f;
private GameObject[] objectstoMove;
private List<GameObject> objectsMoving = new List<GameObject>();
private float distanceTravelled = 0;
private Vector3 lastPosition;
// Use this for initialization
public void Init()
{
objectstoMove = GameObject.FindGameObjectsWithTag("Test");
objectsMoving = new List<GameObject>(objectstoMove);
lastPosition = objectstoMove[objectstoMove.Length].transform.position;
}
// Update is called once per frame
void Update()
{
if (objectstoMove != null)
{
float step = speed * Time.deltaTime;
for (int i = 0; i < objectstoMove.Length; i++)
{
if(distanceTravelled >= 50.0f)
{
objectsMoving.Remove(objectsMoving[objectsMoving.Count]);
}
objectsMoving[i].transform.Translate((objectsMoving[i].transform.up + objectsMoving[i].transform.forward) * step);
distanceTravelled += Vector3.Distance(objectsMoving[objectsMoving.Count].transform.position, lastPosition);
lastPosition = objectsMoving[objectsMoving.Count].transform.position;
}
}
}
}
在這一部分中,我要獲取列表中的最后一個對象並將其移動到列表的開頭:
if(distanceTravelled >= 50.0f)
{
objectsMoving.Remove(objectsMoving[objectsMoving.Count]);
}
通常的想法是將最后一個項目對象從列表移動到列表的開頭,並一直保持移動對象,但是每次列表中的最后一個對象距離distanceTravelled> = 50.0f時,都將其移動到列表的開頭。名單。 如果我沒記錯的話,與循環相同。
做這樣的事情:
if(distanceTravelled >= 50.0f)
{
var moveToFirst = objectsMoving.Last();
objectsMoving.RemoveAt(objectsMoving.Count-1);
objectsMoving.Insert(0, moveToFirst);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.