2015-07-12 102 views
0

这是一个游戏,其目标是无限地向上飞翔。当游戏第一次开始时,我正在汇集一系列对象,这些对象是彼此重叠的云。当我通过它们并且它们不再可见时,我想将最底部的对象移动到创建的最后一个对象的顶部。然后我接下一个对象,并将它移动到那个对象上面。我有:使用池更改无限跑步者对象的位置

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"); 

    } 


} 

我想要使用时间或高度触发何时移动下面的一个。我设置的方式是一旦我的高度达到100,将最底部的物体移到顶部。我无法想象一种方法,一旦我达到某个高度,就会逐步移动每一个。我不想为每个高度触发创建一堆if语句,因为我希望这是一个无限循环。有任何想法吗?

总共有5个对象的,我想通过旋转:

pool [0] [0] 
pool [0] [1] 
pool [0] [2] 
pool [0] [3] 
pool [0] [4] 

这是一个游戏,目的是向上无限飞翔。当游戏第一次开始时,我正在汇集一系列对象,这些对象是彼此重叠的云。当我通过它们并且它们不再可见时,我想将最底部的对象移动到创建的最后一个对象的顶部。然后我接下一个对象,并将它移动到那个对象上面。我有:

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"); 

    } 


} 

我想要使用时间或高度触发何时移动下面的一个。我设置的方式是一旦我的高度达到100,将最底部的物体移到顶部。我无法想象一种方法,一旦我达到某个高度,就会逐步移动每一个。我不想为每个高度触发创建一堆if语句,因为我希望这是一个无限循环。有任何想法吗?

共有5个对象的,我要轮换是:

pool [0] [0] 
pool [0] [1] 
pool [0] [2] 
pool [0] [3] 
pool [0] [4] 

基于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; 
} 

这是工作这是伟大的,但发生了一些我不完全了解的事情。这导致我创建的第一个对象与相机一起移动。但是,除了摄像头看不到的物体移动外,所有物体都在前面移动。所以它正在工作,但为什么这个对象正在移动?

回答

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

这导致我的物体高得离谱并继续上升。 y坐标约在100-1000之间,这会导致我的物体在y坐标上超过100k。 – th3ramr0d

+0

尝试根据高度设置物体位置。类似于pool.pool [0] [poolIndex] .transform.position = altitude + new Vector2(0,100)而不是跟踪currentPosition和lastPosition。 – serhiyb

+0

如果我在其中设置高度变量,它会使我的对象随着高度增加而上升 – th3ramr0d