C# 使用池更改无限运行器的对象位置

C# 使用池更改无限运行器的对象位置,c#,unity3d,C#,Unity3d,这是一个物体无限向上飞行的游戏。当游戏第一次开始时,我收集了一个对象列表,这些对象是彼此上方的云。当我经过它们时,它们不再可见,我想将最底部的对象移动到创建的最后一个对象的顶部。然后我把下一个物体移到上面。我有: void Update () { lastPosition = pool.startPosition; GameObject ObjAltitude = GameObject.Find ("Rocket"); startGame startGameS

这是一个物体无限向上飞行的游戏。当游戏第一次开始时,我收集了一个对象列表,这些对象是彼此上方的云。当我经过它们时,它们不再可见,我想将最底部的对象移动到创建的最后一个对象的顶部。然后我把下一个物体移到上面。我有:

    void Update () {

    lastPosition = pool.startPosition;

    GameObject ObjAltitude = GameObject.Find ("Rocket");
    startGame startGameScript = ObjAltitude.GetComponent <startGame> ();
    altitude = startGameScript.altitude;

    if (altitude > 100) 
    {
        pool.pool [0] [0].transform.position = lastPosition + new Vector2 (0, 100);
        Vector2 currentPosition = pool.pool [0] [0].transform.position = lastPosition + new Vector2 (0, 100);
        lastPosition = currentPosition;
        print ("ALTITUDE OVER 100");

    }


}
    void Update () {

    lastPosition = pool.startPosition;

    GameObject ObjAltitude = GameObject.Find ("Rocket");
    startGame startGameScript = ObjAltitude.GetComponent <startGame> ();
    altitude = startGameScript.altitude;

    if (altitude > 100) 
    {
        pool.pool [0] [0].transform.position = lastPosition + new Vector2 (0, 100);
        Vector2 currentPosition = pool.pool [0] [0].transform.position = lastPosition + new Vector2 (0, 100);
        lastPosition = currentPosition;
        print ("ALTITUDE OVER 100");

    }


}
这是一个物体无限向上飞行的游戏。当游戏第一次开始时,我收集了一个对象列表,这些对象是彼此上方的云。当我经过它们时,它们不再可见,我想将最底部的对象移动到创建的最后一个对象的顶部。然后我把下一个物体移到上面。我有:

    void Update () {

    lastPosition = pool.startPosition;

    GameObject ObjAltitude = GameObject.Find ("Rocket");
    startGame startGameScript = ObjAltitude.GetComponent <startGame> ();
    altitude = startGameScript.altitude;

    if (altitude > 100) 
    {
        pool.pool [0] [0].transform.position = lastPosition + new Vector2 (0, 100);
        Vector2 currentPosition = pool.pool [0] [0].transform.position = lastPosition + new Vector2 (0, 100);
        lastPosition = currentPosition;
        print ("ALTITUDE OVER 100");

    }


}
    void Update () {

    lastPosition = pool.startPosition;

    GameObject ObjAltitude = GameObject.Find ("Rocket");
    startGame startGameScript = ObjAltitude.GetComponent <startGame> ();
    altitude = startGameScript.altitude;

    if (altitude > 100) 
    {
        pool.pool [0] [0].transform.position = lastPosition + new Vector2 (0, 100);
        Vector2 currentPosition = pool.pool [0] [0].transform.position = lastPosition + new Vector2 (0, 100);
        lastPosition = currentPosition;
        print ("ALTITUDE OVER 100");

    }


}
根据serhiyb的回答,我修改了代码:

    void Update () {


    GameObject ObjAltitude = GameObject.Find ("Rocket");
    startGame startGameScript = ObjAltitude.GetComponent <startGame> ();
    altitude = startGameScript.altitude;
    v2Altitude = new Vector2(0,altitude);
    int poolIndex = (((int)altitude)/100) % 5/*pool size goes here*/;

    //pool.pool [0] [poolIndex].transform.position = lastPosition + new Vector2 (0, 100);
    pool.pool [0] [poolIndex].transform.position = v2Altitude + new Vector2 (0, 100);
    Vector2 currentPosition = pool.pool [0] [poolIndex].transform.position = v2Altitude + new Vector2 (0, 100);
    //lastPosition = currentPosition;
}
void更新(){
GameObject objalitude=GameObject.Find(“火箭”);
startGame startGameScript=objalitute.GetComponent();
高度=startGameScript.altitude;
V2高度=新矢量2(0,高度);
int pooldex=((int)高度)/100)%5/*池大小在这里*;
//pool.pool[0][poolidex].transform.position=lastPosition+newvector2(01100);
pool.pool[0][poolidex].transform.position=v2Altitude+new Vector2(01100);
Vector2 currentPosition=pool.pool[0][Poolidex].transform.position=v2Altitude+new Vector2(01100);
//lastPosition=当前位置;
}
这是工作,这是伟大的,但正在发生的事情,我不完全理解。这将导致我创建的第一个对象随摄影机移动。然而,除了在摄像机中看不到的物体移动之外,所有的物体都在前面移动。所以它是工作的,但为什么这一个对象在移动?

void Update(){
  void Update () {

    lastPosition = pool.startPosition;

    GameObject ObjAltitude = GameObject.Find ("Rocket");
    startGame startGameScript = ObjAltitude.GetComponent <startGame> ();
    altitude = startGameScript.altitude;

    int poolIndex = (((int)altitude)/100) % 5/*pool size goes here*/;

        pool.pool [0] [poolIndex].transform.position = lastPosition + new Vector2 (0, 100);
        Vector2 currentPosition = pool.pool [0] [poolIndex].transform.position = lastPosition + new Vector2 (0, 100);
        lastPosition = currentPosition;
  }
lastPosition=pool.startPosition; GameObject objalitude=GameObject.Find(“火箭”); startGame startGameScript=objalitute.GetComponent(); 高度=startGameScript.altitude; int pooldex=((int)高度)/100)%5/*池大小在这里*; pool.pool[0][poolidex].transform.position=lastPosition+newvector2(01100); Vector2 currentPosition=pool.pool[0][Poolidex].transform.position=lastPosition+new Vector2(01100); lastPosition=当前位置; }
这导致我的物体飞得高得离谱,并继续上升。y坐标开始于大约100-1000之间,这会导致我的物体在y坐标上超过近100k。请尝试根据高度设置物体位置。类似于pool.pool[0][poolidex].transform.position=altitude+new Vector2(0,100),而不是跟踪currentPosition和lastPosition。如果在其中设置高度变量,它会使对象随着高度的增加而升高。在基于高度100*((int)altitude)/100设置位置时,您应该使用相同的舍入技术。这将确保位置每100个单元更新一次,而不是每次更新。