【问题标题】:How to create a movement queue using an array with C# and Unity 3D如何使用带有 C# 和 Unity 3D 的数组创建移动队列
【发布时间】:2015-07-10 19:54:50
【问题描述】:

我创建了七个不同的游戏对象并将它们添加到 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];
    }
}

但这并不能正常工作,因为它没有进行旋转运动。我怎样才能修复它以实现这种运动。

谢谢!

【问题讨论】:

    标签: c# unity3d


    【解决方案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++;
    }
    

    【讨论】:

    • 我不确定我有没有那个模组。我必须为数组的长度更改 i 和 m 吗?但是非常感谢。
    • 我在示例中的 SimpleMov 中实现它的方式应该正常工作。 i 代表你想去的索引,m 是总长度。如果您超过长度或低于(尝试查看 7 中的 -1 或 7),它会翻转。 -1 -> 6 和 7 -> 0(记住长度为 7 的索引 7 超出范围)。这有点令人费解,但应该可以。所以在我的示例实现中,因为我们遍历数组,它应该以编程方式工作。
    • 哦,我明白了,但由于某种原因,这个 FOR 不能被重用。第一次运行没问题,但是当我再次调用 SimpleMov 时没有任何反应。想法我该如何解决?
    • 哦,因为它向前设置了一次,但我们需要它来不断地向前切换它们。我将使用解决方案对其进行编辑。 2 秒。
    • 非常感谢,我正在尝试更改,但没有任何成功。
    猜你喜欢
    • 1970-01-01
    • 2015-01-10
    • 1970-01-01
    • 2016-09-28
    • 2010-10-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多