如何停止一个移动的对象,正是我想要的地方
本文关键字:对象 我想要 移动 何停止 一个 | 更新日期: 2023-09-27 18:17:52
我创建了一个代码来计算2个游戏对象的差异,然后通过缓慢移动它们来交换位置,但我找不到一种方法来让它们在到达另一个对象位置时完全停止。任何帮助吗?我尝试了几种方法,但我没能让它们停在我想要的地方。注意:我想要第一个对象正好停在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!");
一个更好的选择是使用unity 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);
似乎我找到了解决方案我自己:)我使用这段代码尽可能地移动两个贴图,然后使用第二段代码完美地移动它们,而不会让它们看起来很奇怪。
第一个代码:
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;