c# - 如何将项目从列表末尾移动到开头?
问题描述
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);
}
推荐阅读
- flutter - Flutter 应用程序在第二次打开时在调试时突然关闭
- postgresql - 如何在 sqlalchemy 混合函数中使用 postgres 方言计算最大值
- python - 网页抓取和查找元素
- terraform - 嵌套局部变量上的查找函数
- python - 带有 Google Cloud SQL 的 Google Cloud Function:Python SQLalchemy 引擎工作,但连接失败
- juniper - 瞻博网络 Ansible Json 格式
- reactjs - React mui-datatable 元素类型无效
- python - KeyError:'无法格式化此回调文件路径:“saved_models\\dataweights.{epoch:02d}-{val_accuracy:.2f}.hdf5”。原因:\'val_accuracy\''
- c# - 地形生成算法的错误
- amazon-web-services - Elastic Beanstalk 在长进程中静默失败