いぬおさんのおもしろ数学実験室

おいしい紅茶でも飲みながら数学、物理、工学、プログラミング、そして読書を楽しみましょう

Unityでスクリプトを使って線分を描く(2)(初心者向け)

 今回の目標は次のように空間内に線分を描くことです。
f:id:Inuosann:20210406192051p:plain:w250

前回、次の絵のように1本だけ描くことには成功しています。
f:id:Inuosann:20210406192424p:plain:w250
そのときのコードは次の通りでした(なお、点を追加すれば折れ線は簡単に描けます)。

        var renderer = gameObject.AddComponent<LineRenderer>();
        var pos = new Vector3[]{
            new Vector3(1f, 0f, 20f),
            new Vector3(10f, 10f, 10f),
        };
        renderer.startWidth = 1f;//線分の太さ
        renderer.endWidth = 1f;
        renderer.positionCount = pos.Length;//与えた点の数
        renderer.SetPositions(pos);

 しかし、最初の絵のように線分を2本描こうとして単純に上のコードをもう1回繰り返して書いて実行してもうまくいきません。(うまくいかないことを)試してみてください。
 ネットをあちこち調べていろいろ実験をして結局、次のようにしたらうまくいきました。

        //1本目
        GameObject g = new GameObject();
        var rd = g.AddComponent<LineRenderer>();
        var pos = new Vector3[]{
            new Vector3(1f, 0f, 20f),
            new Vector3(10f, 10f, 10f),
        };
        rd.startWidth = 1f;//線分の太さ
        rd.endWidth = 1f;
        rd.positionCount = pos.Length;//与えた点の数
        rd.SetPositions(pos);

        //2本目
        GameObject go = new GameObject();
        var rd1 = go.AddComponent<LineRenderer>();
        var pos1 = new Vector3[]{
            new Vector3(-5f, 0f, 20f),
            new Vector3(-10f, 10f, 10f),
        };
        rd1.startWidth = 1f;//線分の太さ
        rd1.endWidth = 1f;
        rd1.positionCount = pos1.Length;//与えた点の数
        rd1.SetPositions(pos1);
    }

注意して読んでください。2回とも GemeObject を取得し、そこへ LineRenderer コンポーネントを追加し、それを用いて描画しているのです。gameObject.AddComponent();
を複数回実行するとその時点でエラーが出るようです。なので、これは使わずにやってみました。

 実際にはもちろん描画用の関数を作るなど、各自で楽をできるようにしてください。これで空間内で自由に線分(折れ線)を描けます! こうすればうまくいくと分かるまでに相当時間を使いましたが、使い方が分からない人もこのサイトを見れば一発です。

追記:
 第3回の記事も必ずご覧ください。重要な注意を書きました!
www.omoshiro-suugaku.com