2017-08-19 6 views
1

私は現在、Vector3.Lerpを使っていくつかのオブジェクトを連続してインスタンス化しています。これは動作していますが、オブジェクト間にもいくつかのギャップがあります。これは、開始点と終了点の間の距離が新しいオブジェクトを挿入するのに十分な大きさではない場合に発生しますが、少しだけスライドできるほど十分です。彼らはエンドツーエンドで実行する必要があり、お互いに対して直接突き合っています。Unity lerpはギャップを取り除きます

コードは次のとおりです。私の

Vector3 startPosition= blah.transform.position. 
Vector3 endPosition = getCurrentMousePosition(); 
Vector3 size = ObjectToSpawn.GetComponent<Renderer>().bounds.size; 
fillCount = Mathf.RoundToInt(Vector3.Distance(startPosition, endPosition)/size.z); 

float distance = 1.0f/fillCount; 
float lerpValue = 0; 

for (int i = 0; i < fillCount; i++) 
{ 
    lerpValue += distance; 
    nextPosition = Vector3.Lerp(startPosition, endPosition, lerpValue); 
    Instantiate(ObjectToSpawn, nextPosition, Quaternion.identify); 
} 

パートはそれだけでちょうど彼らのサイズ/距離に基づいて行のオブジェクトをインスタンス化しようとしている価値があるかもしれないと思うが、私はかなりそれを得るように見えることはできません右どちらか。このシステムは何かのために使用されていますが、新しいコードを書き直すのではなく、これを少し変更して動作させることはできます。私はLerpの値を丸めることが、おそらく行く方法だろうと思っていますか?

何かアドバイスやアドバイスをいただければ幸いです。

答えて

1

使用すると、オブジェクトを正確に隙間なく触れるしたい場合は、開始位置と終了位置の間の距離がなければなりませんそれらのサイズの整数倍ちょうどあなたのループの前に次の行を追加し

試してみてください。

endPosition = Vector3.Lerp(startPosition, endPosition, (fillCount * size.z)/Vector3.Distance(startPosition, endPosition)); 
+0

それを行っています。ちょっとコードを微調整しなければなりませんでした((i + 1)* size.z)。ありがとう!! – Tony

1

しきい値を使用できます。それは位置が終了位置に非常に近いだとき、あなたはこのように直接終了位置にそれをクランプすることができます:

if(Vector3.Distance(nextPosition,endPosition)<threshold){ 
    nextPosition = endPosition; 
}else{ 
    nextPosition = Vector3.Lerp(startPosition, endPosition, lerpValue); 
} 
関連する問題