Cou氏の徒然日記

ほのぼの日記ブログです。

Unityで遊ぼう [振り子編 その2:振り子の紐の作成]

前回で、振り子を作成しました。

www.youtube.com

2つのオブジェクト、Cube (支点) とSphere はHinge Jointで連動して動くようになりましたが、これだと、離れた位置にある2つのオブジェクトであり、振り子には見えませんので。

 

■ 振り子の紐の作成

ということで、紐的なものでつなぐ方法がないかを探していると…

「Line Renderer」というものを使えばよさそうです。

 

とりあえず今の状態を保存しておくためにも、まずはもとのオブジェクト(Cube+Sphere)を Prefab(プレハブ)化

Prefab化しておけば、状態を保存した状態になり、複製(復元)も簡単。

Prefab化したオブジェクトを複製(コピー)して、X座標だけずらせば、こうやって3つにするのも簡単ですからね。

 

それでは、Sphereオブジェクトに、Create Emptyで空オブジェクトを生成。

これを「Line」として、Line Renderer」を「Lineに追加

docs.unity3d.com

Line Renderer (ラインレンダラー) コンポーネントは、3D 空間の 2 つ以上の点の配列をとり、それぞれの間に直線を描きます。1 つのラインレンダラーを使用して、単純な直線から複雑な螺旋まで、どんなものでも描画することができます。

 

このLine Rendererに色々と設定をしていけばいいようです。

「Materials」の「Element 0」には、「Default-Line」を設定。

「Width」には適当に「0.05」を設定。(これで線の太さが変わるようです)

 

続いて、「Sphere(球)」に「Line」の位置を設定するスクリプトを追加。

[SphereCs.cs]

{
    // Lineオブジェクト指定用
    [SerializeField]
    private LineRenderer line_obj = null;

    // 支点オブジェクト指定用
    [SerializeField]
    private Transform cube_obj = null;

    public void Update()
    {
        // 紐の始点(Sphere)と終点(Cube)の座標を更新
        this.line_obj.SetPosition(0, this.transform.position);
        this.line_obj.SetPosition(1, this.cube_obj.position);
    }
}

Sphereの位置が変わるにつれて、位置を自動調整更新してもらわないといけないため、Update() にオブジェクトの座標を再設定する処理を記述。

 

そして、オブジェクトを設定。

  • Line_objには「Line(Line Renderer)」を設定。
  • Cube_objには「Cube(Transform)」を設定。

 

これでOKです。

さっそく動かしてみると…

youtu.be

おお、紐が付きました。いい感じですね。