【Unity】ナビメッシュの経路上に等間隔にオブジェクトを配置する

投稿者: | 2020-07-19

ナビメッシュエージェントが目的地へ向かう経路上に等間隔にオブジェクトを配置してみます。前の記事で取得した経路上のコーナーを使います。上のGIF画像ではコーナーに緑色の球が置かれています。

if (Input.GetKeyDown(KeyCode.E))
{
    interval = Random.Range(1f, 10f);

    GameObject[] spheres = GameObject.FindGameObjectsWithTag("OrangeSphere");

    if(spheres.Length != 0)
    {
        foreach (GameObject s in spheres)
        {

            Destroy(s);

        }
    }

    float i = 0f;
    Vector3 point = default;

    for (int n = 0; n < corners.Length; n++)
    {
        if (n == 0) continue;

        float dist = Vector3.Distance(corners[n], corners[n - 1]);

        while (true)
        {               
            if (dist >= interval - i)
            {
                point = Vector3.Lerp(corners[n - 1], corners[n], (interval - i) / dist);
                Instantiate(sphere1, point, sphere1.transform.rotation);

                float dist2 = Vector3.Distance(corners[n], point);
                if (dist2 < interval)
                {
                    i = dist2;
                    break;
                }
                else
                {
                    i -= interval;
                }
            }
            else
            {
                if (point == default)
                {
                    i += dist;
                }
                else
                {
                    i = Vector3.Distance(corners[n], point);
                }
                break;
            }
        }
    }
}

まずランダムで配置する間隔を決めて、すでにオレンジの球があればすべて削除してから、経路上に等間隔にオレンジの球を生成します。

今と一つ前のコーナーまでの長さと、オレンジの球を配置する間隔を比べて、前者が長ければその間に球を配置、短ければ次のコーナーを参照するという風に場合分けしました。

ちゃんとコーナーをまたいで等間隔にオレンジの球が配置されています。

コメントを残す

メールアドレスが公開されることはありません。