以下の内容はhttps://www.karvan1230.com/entry/2019/11/12/234851より取得しました。


【Unity】今更ながらLineRendererで線を引く

秋深し

ちょっとした興味本位で何も知らないアイドルのライブを観に行ったら案の定、コールもMIXもジャンプのタイミングも分からなくて一時間半近く突っ立っているだけの時間を過ごした皆さんこんばんわ。

いや、ライブ前に少しは曲を覚えようと努力はしたのですが歌詞の意味がちっとも分からなくて断念しました。ごめんなさい。

あと、最近は女の子でも女性アイドルに対してガチ恋口上?「愛してるー」とか言うんですね。その愛を十分の一でいいから私に向けてください、よろしくお願いします。

 

線を引く

Unityに手を出してから早幾年、これまで余り必要に迫られていなかったので手を出してこなかったのですが、制作中のゲーム内でLineRendererを使って線を描画する必要が出てきました。

こんな感じに

f:id:Karvan:20191112232353p:plain

 

なので今回はLineRendererを使っての線描画にチャレンジです。

 

LineRenderer

LineRendererとはUnity標準で用意されている線描画用のコンポーネントで、 2点以上の座標を指定することで各点を繋いだ線を描画します。

「2点以上の」と記載した通り直線毎ではなく、繋がってさえいれば一つのLineRendererで多点間を繋いだ線を作れます。

 

LineRendererを使って線を引く手順は以下の通り

  1. オブジェクトにLineRendererコンポーネントを追加する
  2. 線の色や太さ、テクスチャ等を設定する
  3. 線の頂点数を指定する
  4. 各頂点の座標を指定する

 

ここで1,2は事前準備の手順で線の種類(色、太さ等)別に作成し、Prefab化することで線を作成する毎に使用します

3,4が実際に線を描画する時に必要な処理となっています。

 

事前準備の手順

LineRenderer専用のオブジェクトとするために、空のオブジェクトにLineRendererコンポーネントを追加します。

 

f:id:Karvan:20191112233023p:plain

 LineRendererを追加すると上図のような設定がInspectorに表示されるので、ここで線の色や太さ等を設定します。

 

色々細かい設定がありますが、主に使用するのは

  • Width:線の太さを指定します。
  • Color:線の色を指定します。
  • Corner Vertices:線の曲がり角を丸くしたい場合に指定
  • EndCap Vertices:線の終点を丸くしたい場合に指定
  • Loop:始点と終点を繋ぐ場合にチェックをONにします

ぐらいでしょうか。

ちなみにAlignmentの項目は線描画の向きを設定しています。

  • View:線がカメラを向くように描画する
  • Transform Z:オブジェクトのZ方向に描画する

 

色とは別に線にテクスチャを適用したい場合は、Materialを作成する必要があります。

f:id:Karvan:20191112233217p:plain

今回は上のようにビームっぽいテクスチャを使用しました。

 

LineRendererの設定が完了したらオブジェクトをPrefab化しましょう。
色や太さが違う線を描画したい場合は、種類毎に上の設定をしたPrefabを準備します。

 

線を描画

線の描画はスクリプトで行います。

 LineRendererのPrefabをInstaniateで生成して、LineRendererコンポーネントを取り出します。

// Lineオブジェクトの生成
GameObject beam = Instantiate(BeamPrefab,
                    new Vector3(0, 0, 0),
                    Quaternion.identity) as GameObject;
                    
// LineRenderer取得
LineRenderer line = beam.GetComponent<LineRenderer>();

 
LineRenderer描画する線の頂点数の設定して、各点の座標を指定します。今回はInspectorで座標を指定したListから座標を指定しています。 

// 頂点数の設定
line.positionCount = PointList.Count;

// 各頂点の座標設定
for (int iCnt = 0; iCnt < PointList.Count; iCnt++)
{
    line.SetPosition(iCnt, PointList[iCnt]);
}

LineRendererに座標設定した時点で画面に描画されます。f:id:Karvan:20191112233749p:plain

 
描画されたLineRendererは当然ながらオブジェクトとしてゲーム空間に存在しているので、動かすことができます。
動かす場合はUseWorldSpaceのチェックをOFFにします。
f:id:Karvan:20191112233812g:plain   f:id:Karvan:20191112233837g:plain
 

いざ使ってみる

製作中のゲームでは自機の進行を阻むバーとして使っております。
Colliderを設定しているので自機の弾も弾く仕様です。

f:id:Karvan:20191110195717g:plain

LineRendererって意外と簡単に使えます。

 

 




以上の内容はhttps://www.karvan1230.com/entry/2019/11/12/234851より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14