2016-11-13 11 views
0

2つのゲームオブジェクトの違いを計算し、ゆっくりと移動させて位置を入れ替えるコードを作成しましたが、オブジェクトの位置。どんな助け?私はカップルの方法を試みたが、私は彼らが私が望むところで正確に止めることはできなかった。注:最初のオブジェクトをmovedSecondTilePosとmoveFirstTilePosの2番目のオブジェクトで正確に停止します。動きのあるオブジェクトを正確に停止する方法

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

それらが空気であり、その後、位置が入れ替えながら位置が保存されますコード。

EDIT:私はコードを更新しましたが、私はこのコードに非常に近づいていますが、私が望むのと同じポジションではありません。

//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

私は解決策に私の自己を発見したように思える:) 私は私ができる限り近い両方のタイルを移動するには、このコードを使用し、それは奇妙に見えるすることなく、完全にそれらを移動するために、第2のコードを使用していました。

まずコード:

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からbに移動します。たとえば、a = 10、b = 20、およびalpha = 0.次に、 –

+0

Lerpは値αに対して値をaからbに移動します。たとえば、a = 10、b = 20、およびalpha = 0の場合、結果の値はa(10)になります。アルファ値が1の場合、結果の値はb(20)になります。 > 0および<1のいずれかの値の場合、結果の値はaとbの間になります。 movetowardsの場合、それは一定の値を移動します。遠くのオブジェクトの場合、距離に応じて移動速度を更新しない限り、lerpはMoveTowardsよりも高速に見えます。 –

関連する問題