2016-11-13 73 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快。 –