我创建了一个计算两个游戏物体差异的代码,然后通过缓慢移动它们来交换位置,但是我无法找到一种方法来让它们在到达另一个时完全停止对象位置。任何帮助?我尝试了一些方法,但我没有设法让它们完全停在我想要的地方。注意:我希望第一个对象完全停在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快。 –