2016-11-13 20 views
0

我創建了一個計算兩個遊戲物體差異的代碼,然後通過緩慢移動它們來交換位置,但是我無法找到一種方法來讓它們在到達另一個時完全停止對象位置。任何幫助?我嘗試了一些方法,但我沒有設法讓它們完全停在我想要的地方。注意:我希望第一個對象完全停在movedSecondTilePos,第二個對象位於movedFirstTilePos。如何正確地停止移動物體在我想要的位置

https://www.youtube.com/watch?v=P42VB0BSBnI

而他們的空氣,然後交換有位置從而節省存在位置的代碼。

編輯:我更新了代碼,我得到這個代碼非常接近,但仍然不是100%相同的位置,我想要的。

//Saves Moved Positions of Both Tiles 
    Vector3 movedFirstTilePos = firstTileObj.transform.position; 
    Vector3 movedSecondTilePos = secondTileObj.transform.position; 

    // Calculate the Difference of each Tile from the other 
    Vector3 firstTilePosDifference = firstTileObj.transform.position - secondTileObj.transform.position; 
    Vector3 secondTilePosDifference = secondTileObj.transform.position - firstTileObj.transform.position; 


    //Move First Tile to Second Tile Position and vise versa 
    while (firstTileObj.transform.position != movedSecondTilePos) { 
     firstTileObj.transform.position = Vector3.Lerp(firstTileObj.transform.position, movedSecondTilePos, tileMoveSpeed * Time.deltaTime); 
     secondTileObj.transform.position = Vector3.Lerp(secondTileObj.transform.position, movedFirstTilePos, tileMoveSpeed * Time.deltaTime); 
     yield return null; 
    } 
    Debug.Log ("Swaped Tiles!"); 

回答

0

好像我找到了解決辦法我自己:) 我用這個代碼移動親如我既能磚,然後用第二代碼對他們完全沒有移動使它看起來怪怪的。

第一代碼:

firstTileObj.transform.position = Vector3.Lerp(firstTileObj.transform.position, movedSecondTilePos, tileMoveSpeed * Time.deltaTime); 
secondTileObj.transform.position = Vector3.Lerp(secondTileObj.transform.position, movedFirstTilePos, tileMoveSpeed * Time.deltaTime); 

第二代碼:

//Moves Perfectly Both Tiles 
    firstTileObj.transform.position = originalSecondTilePos; 
    secondTileObj.transform.position = originalFirstTilePos; 
1

一個更好的選擇將使用具有根據物體的距離計算方法爲速度統一Vector3.MoveTowards

// Calculate the speed in which the tile should move 
float distance= (firstTileObj.transform.position - secondTileObj.transform.position).magnitude; 

//In time seconds, the time will reach it's destination 
float time = 2; 
tileMoveSpeed = distance/time; 

firstTileObj.transform.position = Vector3.MoveTowards(firstTileObj.transform.position, movedSecondTilePos, tileMoveSpeed * Time.deltaTime); 
secondTileObj.transform.position = Vector3.MoveTowards(secondTileObj.transform.position, movedFirstTilePos, tileMoveSpeed * Time.deltaTime); 
+0

Vector3.MoveTowards和Vector3.Lerp有什麼區別? Lerp越快,你越遠,越接近你? – N1ckGreek

+0

Lerp將a的值從a移到a的值。例如,a = 10,b = 20,alpha = 0。然後 –

+0

Lerp將值從a移到b相對於alpha值。例如,a = 10,b = 20,alpha = 0,那麼結果值將是a(它是10)。如果alpha值爲1,那麼結果值將是b(即20)。任何值> 0和<1,結果值將在a和b之間。在movetowards的情況下,其移動的價值不變。因此,對於遠處的物體,除非根據距離更新移動速度,否則lerp看起來會比MoveTowards快。 –

相關問題