繁体   English   中英

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

[英]How to create a movement queue using an array with C# and Unity 3D

我创建了七个不同的GameObject,并将它们添加到Vector3数组中以创建行队列。 我要实现的是旋转运动,第一个对象处于第7个位置,第二个对象处于第一个位置,依此类推。

我需要您的帮助,以使函数移动此对象。 这是我到目前为止的内容:

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(返回到开头)。

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++;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM