我創建了一個計算兩個遊戲物體差異的代碼,然後通過緩慢移動它們來交換位置,但是我無法找到一種方法來讓它們在到達另一個時完全停止對象位置。任何幫助?我嘗試了一些方法,但我沒有設法讓它們完全停在我想要的地方。注意:我希望第一個對象完全停在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!");
Vector3.MoveTowards和Vector3.Lerp有什麼區別? Lerp越快,你越遠,越接近你? – N1ckGreek
Lerp將a的值從a移到a的值。例如,a = 10,b = 20,alpha = 0。然後 –
Lerp將值從a移到b相對於alpha值。例如,a = 10,b = 20,alpha = 0,那麼結果值將是a(它是10)。如果alpha值爲1,那麼結果值將是b(即20)。任何值> 0和<1,結果值將在a和b之間。在movetowards的情況下,其移動的價值不變。因此,對於遠處的物體,除非根據距離更新移動速度,否則lerp看起來會比MoveTowards快。 –