TransWikia.com

オブジェクトをゆっくり指定の位置まで移動させたい

スタック・オーバーフロー Asked by fing on January 6, 2021

オブジェクトをゆっくり指定の位置まで移動させたいのですがゆっくりではなく一瞬で最後の指定ポイントについてしまいます。
Vector3.Lerpはwhileだとうまく動かないのでしょうか?
いい方法があればご教授お願いします。

    IEnumerator Move()
    {
        foreach(Transform _childobject in _pointParent)
        {
            _spped = 0;

            while(true)
            {

                _spped += Time.deltaTime / 2f;
                this.transform.position = Vector3.Lerp(this.transform.position, _childobject.position, _spped);

                if(_spped > 1) break;

            }
             yield return null;
        }
    }

One Answer

コルーチンでは yield return null; で中断し次のフレームから再開となります。
提示されているコードではwhile文を抜けたあとに yield return null; しているため、whileの処理が同じフレームで処理されることになり一瞬で処理が終わります。なので、yield return null; はwhile文の中に記述するのが正しいと思います。

提示されたコードは複数点を通過して移動することを意図しているようですので、それを踏まえたコードを例示します。

IEnumerator Move()
{
  foreach (Transform childobject in _pointParent)
  {
    var start = this.transform.position;
    var goal = childobject.position;
    var t = 0.0f;

    while (t < 1.0f)
    {
      t += Time.deltaTime / 2.0f;
      t = (t > 1.0f) ? 1.0f : t; // 上限は1.0
      this.transform.position = Vector3.Lerp(start, goal, t);
      yield return null;
    }
  }
}

Answered by nee on January 6, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP