0

特定のオフセットで多数の子を持つゲームオブジェクトをインスタンス化しています。このコルーチンは、子ごとに 1 回呼び出されます。子供たちの Y 位置をランダム化し、Lerp で正しい endPosition に戻したいと考えています。ただし、何らかの理由で endPosition がこの変更の影響を受けています。開始位置のランダム化された Yoffset が何であれ、パーツは最終的に組み立てられます。

startPos.y; のみをランダム化しています。endPos が影響を受けるのはなぜですか?

多くの人がこの問題に悩まされているので、どんな助けも素晴らしいでしょう.

IEnumerator TransitionAnim(Transform part, bool start)
    {
        float t = 0;

        if (start)
            {
        Vector3 startPos = new Vector3(part.position.x, Random.Range(30,-30), part.position.z);
        Vector3 endPos = new Vector3(part.position.x - startingOffset, part.position.y, part.position.z);

        while (t < duration)
            {
           t += Time.deltaTime;
           part.position = Vector3.Lerp(startPos, endPos, Mathf.SmoothStep(0,1F,t/duration));       
           yield return 0;   
            }
           part.position = endPos;
    }
}
4

1 に答える 1

1

上記のコードリストを使用して小さなテストを作成しました.endPosは変更されていないため、問題は他の機能にある可能性があります. これが私の推測です:

  1. endPos が生成されるのは、パーツ (トランスフォーム) の位置に依存します。
  2. いくつかの計算の後、パーツ(トランスフォーム)の位置に値を代入すると、パーツの位置が変更されます
  3. 別のゲーム オブジェクトが同じ変換パーツを使用して独自の endPos を生成しようとしますが、パーツの位置は既に変更されているため、このゲーム オブジェクトは異なる endPos を取得します。

私の推測が正しければ、解決策があります。

  1. パーツの位置に新しい値を割り当てないでください
  2. パーツの位置に基づいて新しい vector3 を使用してみてください
于 2013-04-27T03:22:14.707 に答える