原カバンは鞄のお店ではありません。

Unityを使ったゲーム制作のあれこれを綴っていきます。

【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って意外と簡単に使えます。

 

 

◇プライバシーポリシー

●個人情報の利用目的

当ブログでは、メールでのお問い合わせ、メールマガジンへの登録などの際に、名前(ハンドルネーム)、メールアドレス等の個人情報をご登録いただく場合がございます。

これらの個人情報は質問に対する回答や必要な情報を電子メールなどをでご連絡する場合に利用させていただくものであり、個人情報をご提供いただく際の目的以外では利用いたしません。

●個人情報の第三者への開示

当サイトでは、個人情報は適切に管理し、以下に該当する場合を除いて第三者に開示することはありません。

・本人のご了解がある場合
・法令等への協力のため、開示が必要となる場合

個人情報の開示、訂正、追加、削除、利用停止
ご本人からの個人データの開示、訂正、追加、削除、利用停止のご希望の場合には、ご本人であることを確認させていただいた上、速やかに対応させていただきます。

アクセス解析ツールについて

当サイトでは、Googleによるアクセス解析ツール「Googleアナリティクス」を利用しています。

このGoogleアナリティクスはトラフィックデータの収集のためにCookieを使用しています。このトラフィックデータは匿名で収集されており、個人を特定するものではありません。
この機能はCookieを無効にすることで収集を拒否することが出来ますので、お使いのブラウザの設定をご確認ください。

●免責事項

当サイトからリンクやバナーなどによって他のサイトに移動された場合、移動先サイトで提供される情報、サービス等について一切の責任を負いません。

当サイトのコンテンツ・情報につきまして、可能な限り正確な情報を掲載するよう努めておりますが、誤情報が入り込んだり、情報が古くなっていることもございます。

当サイトに掲載された内容によって生じた損害等の一切の責任を負いかねますのでご了承ください。

●プライバシーポリシーの変更について

当サイトは、個人情報に関して適用される日本の法令を遵守するとともに、本ポリシーの内容を適宜見直しその改善に努めます。

修正された最新のプライバシーポリシーは常に本ページにて開示されます。