LoginSignup
2
2

More than 5 years have passed since last update.

Unity 接地判定の線とか、見えない境界とか、見たくなったときは LineRendererで画面に線を引く

Last updated at Posted at 2017-06-07

見えないものを見たいときとか、
画面上に 線 を引きたいときがある。

20170607o1.png

接地判定の線を可視化

記事を移動した。
http://makegame.warabenture.com/?p=397

古今の線の引き方の考え方の 移り変わり

古いプログラミングなら drawLine( x, y ) とかで線が引けたもんだ。命令を羅列するというコンセプトで 関数に引数を渡して呼び出す というサイクルに なんでんかんでん 組み込まれていた。

Unityだと 物理演算エンジンにお供えするものかどうかというコンセプトで あらゆるものがお供えもので、
ゲームオブジェクトを追加して コンポーネントをアタッチ
というサイクルに なんでんかんでん 組み込まれている。

やってみる

20170526d2b.png

ゲームオブジェクトを追加して、LineRenderer を持たせるとできる。

「[Unity] - LineRenderer -」note
https://note.mu/mtimsno/n/n9ea6526736ac

線が表示されてなかったら、背景の後ろに表示されているだろう。
ソーティング・レイヤーなどを確認。

[Use World Space] のチェックは外してカメラのレンズに描画している感じにする。そうすると カメラのスクロールについてきてくれる。

20170526gif11.gif

C#スクリプトで 位置を設定するなら こんな感じ。

    /// <summary>
    /// 表示区画の枠
    /// </summary>
    [MenuItem("Tool/RefreshLineFrame")]
    static void RefreshLineFrame()
    {
        // 枠
        lineFrame = GameObject.Find("LineFrame");
        transform_lineFrame = lineFrame.GetComponent<Transform>();
        LineRenderer lineRenderer = lineFrame.GetComponent<LineRenderer>();
        float lineWidth = lineRenderer.widthMultiplier;
        float viewWidthHalf = config.pixelOfViewWidth / 2;
        lineRenderer.SetPositions(new Vector3[] {
            new Vector3(-0.8f-lineWidth-viewWidthHalf,0.8f+lineWidth,-9f),
            new Vector3(0.8f+lineWidth+viewWidthHalf,0.8f+lineWidth,-9f),
            new Vector3(0.8f+lineWidth+viewWidthHalf,-0.8f-lineWidth,-9f),
            new Vector3(-0.8f-lineWidth-viewWidthHalf,-0.8f-lineWidth,-9f),
        });
    }

枠を広げるコードとか こんなんになる。

20170526gif12.gif

Z軸を 0 にすると隠れてしまったりするので

        GameObject groundedLine_go = GameObject.Find("GroundedLine");
        LineRenderer line = groundedLine_go.GetComponent<LineRenderer>();
        line.SetPositions(new Vector3[] {
            new Vector3(begin.x, begin.y, line.transform.position.z),
            new Vector3(end.x, end.y, line.transform.position.z)
            });

z軸は別のところからもってきてもいい。

調整

もっと 枠を ぴったりさせよう。

    /// <summary>
    /// 表示区画の枠
    /// </summary>
    [MenuItem("Tool/RefreshLineFrame")]
    static void RefreshLineFrame()
    {
        Config config = (Config)GameObject.Find("Config").GetComponent<MonoBehaviour>();

        GameObject lineFrame = GameObject.Find("LineFrame");
        Transform transform = lineFrame.GetComponent<Transform>();
        LineRenderer lineRenderer = lineFrame.GetComponent<LineRenderer>();
        float lineWidthHalf = lineRenderer.widthMultiplier / 2;
        float viewWidthHalf = config.pixelOfViewWidth / 2;
        float viewHeightHalf = config.GetPixelOfSectionHeight() / 2;
        lineRenderer.SetPositions(new Vector3[] {
            new Vector3(-lineWidthHalf-viewWidthHalf,lineWidthHalf+viewHeightHalf,-9f),
            new Vector3(lineWidthHalf+viewWidthHalf,lineWidthHalf+viewHeightHalf,-9f),
            new Vector3(lineWidthHalf+viewWidthHalf,-lineWidthHalf-viewHeightHalf,-9f),
            new Vector3(-lineWidthHalf-viewWidthHalf,-lineWidthHalf-viewHeightHalf,-9f),
        });
    }

20170526f1.png

自分で書いていて 単位が分からなくなった。
ここらへんは工夫しよう。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2