Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/unity3d/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用带有C#和Unity 3D的数组创建移动队列_C#_Unity3d - Fatal编程技术网

如何使用带有C#和Unity 3D的数组创建移动队列

如何使用带有C#和Unity 3D的数组创建移动队列,c#,unity3d,C#,Unity3d,我已经创建了七个不同的游戏对象,并将它们添加到Vector3数组中以创建一个队列。我试图实现的是旋转运动,第一个物体处于第七个位置,第二个物体处于第一个位置,依此类推 我希望您能帮助我使函数移动这些对象。这就是我到目前为止所做的: using UnityEngine; using System.Collections; public class StairsController : MonoBehaviour { public GameObject[] degrau; Vec

我已经创建了七个不同的游戏对象,并将它们添加到Vector3数组中以创建一个队列。我试图实现的是旋转运动,第一个物体处于第七个位置,第二个物体处于第一个位置,依此类推

我希望您能帮助我使函数移动这些对象。这就是我到目前为止所做的:

using UnityEngine;
using System.Collections;

public class StairsController : MonoBehaviour {

    public GameObject[] degrau;
    Vector3[] positionArray = new Vector3[7];

    private int i = 6;
    private int a = 6;

    // Use this for initialization
    void Start () {
        positionArray [i-6] = degrau[a-6].transform.position; 
        Debug.Log (positionArray [i-6]);

        positionArray [i-5] = degrau[a-5].transform.position;
        Debug.Log (positionArray [i-5]);

        positionArray [i-4] = degrau[a-4].transform.position;
        Debug.Log (positionArray [i-4]);

        positionArray [i-3] = degrau[a-3].transform.position;
        Debug.Log (positionArray [i-3]);

        positionArray [i-2] = degrau[a-2].transform.position;
        Debug.Log (positionArray [i-2]);

        positionArray [i-1] = degrau[a-1].transform.position;
        Debug.Log (positionArray [i-1]);

        positionArray [i] = degrau[a].transform.position;
        Debug.Log (positionArray [i]);
    }

    public void SimpleMov (){
        // i need help here
        degrau [a].transform.position = positionArray [i - 1];
    }
}
但这并没有起到应有的作用,因为它没有做旋转运动。如何修复它以实现此运动


谢谢大家!

此修改的模函数将为您提供所选的索引(通常为i+1),但如果您超过长度的界限,它将循环回到前面

因此,如果您想要一个7长数组的第8个索引,您将返回0(回到开始)

intmod(inti,intm){return((i%m)+m)%m;}
//在Start()的内部将其设置为0
国际标准指数;
公共无效SimpleMov(){
int positionIndex=startIndex;
对于(int i=0;i
我不确定我是否得到了那个mod。我必须改变数组长度的i和m?但是非常感谢,我在示例中用SimpleMov实现它的方法应该是正确的。i表示您要访问的索引,m表示总长度。如果你超过了这个长度或低于这个长度(试着看-1或7/7),它会翻转过来-1->6和7->0(记住长度为7的索引7超出范围)。这有点复杂,但应该能用。所以在我的示例实现中,由于我们遍历数组,它应该以编程方式工作。哦,我明白了,但是由于某些原因,它不能被重用。第一次运行还可以,但是当我再次调用SimpleMov时,什么也没有发生。想法我如何解决它?哦,因为它使它向前移动了一次,但我们需要它不断地向前移动。我将用解决方案编辑它。2秒。非常感谢,我正在尝试更改,但没有成功。
int mod(int i, int m) { return ((i % m) + m) % m; }

// Set this to 0 inside of Start()
int startIndex;

public void SimpleMov (){
    int positionIndex = startIndex;
    for (int i = 0 ; i < degrau.Length ; i++) 
    {
        positionIndex++;
        degrau[i].transform.position = positionArray [mod(positionIndex, positionArray.Length)]
    }
    startIndex++;
}