チュートリアルシェアする0ども、ゴコーです。STG作ってたらへにょりレーザーが欲しくなりました。作る時に欲しい記事が見つからなかったので自分で書くことにしました。いう訳で、動的なメッシュ生成から初めて、数回に分けてへにょりレーザーを作っていきましょう。レーザーって?へにょりレーザーってなんやねんという人もいると思います。シューティングゲームの東方シリーズにおける、うねうねと曲がるレーザー攻撃のことです。正式名称は決まっていないらしく通称です。今回のチュートリアルでは以下のようなものを作ります。スポンサーリンク前提いきなりですが、メッシュ生成の基礎については他サイトさまが詳しいのでそちらを参考にしてください。下記の超基本編は終わらせてからチュートリアルを始めた方が良いと思います(その2以降は必須ではありません)。ナゾレバ・ハシレール(以下ナゾレバ)を参考にしており、Unity5.3.2に対応したソースコード(9/18現在)はサポートページからダウンロードすることができます。そのため、書籍で解説されている一部ソースコードへの解説は省略しています。詳しく知りたい方は是非書籍を購入してください。Unityの操作は一通り分かるくらいの初心者~を想定してます。そのため、初心者向けの補完知識をコラムとして各節の最後に載せています。書いてある部分をクリックしてください。本筋とはあまり関係ないけどやると良さげなものや、ちょっとディープな最適化などはへにょりレーザー完成後の追加項目として扱います。四角ポリゴンの生成について基礎については上記の記事で十分確認できると思います。今回は三角ポリゴンではなく四角ポリゴンを作る必要があるので、上記の知識を前提とした簡単な解説を挟みつつ作業を進めていきます。ポリゴンの生成に最低限必要なものは頂点座標と頂点インデックスです。三角ポリゴンと四角ポリゴンとの大きな違いは1つのポリゴンを作成するのに必要な頂点座標が3つから4つになることです。いう訳で、次節からは四角ポリゴンに対応した頂点座標の登録を行います。以下のように、レーザーとナゾレバの道路生成は似ている点がかなり多いです。進行方向という概念があるという訳で、頂点座標の計算にはナゾレバの考え方を使います。大雑把に書くと、レーザーの中心座標を1つ用意すれば良い感じにメッシュの頂点座標が2つ計算される仕組みを用意するというものです。「良い感じの頂点座標計算」の流れは以下のような感じです。方向ベクトルに直交するベクトルを元に両脇の頂点を設定。中心からの距離は一定に。この方法を用いて作成した頂点でメッシュを描画して、矢印などを書き足した画像がこちら。黒い点が中心点、青い矢印が進行方向、赤い矢印がメッシュの幅、青い点が頂点座標を表しています。これらの情報をひっくるめてセクションと呼称します。四角メッシュを生成するようにします。必要なクラスと変数を用意しましょう。生成するレーザーの幅です。元に各種ベクトルを計算します。2f;}}}以降、変更点はハイライトします。今回は大きく分けて2つのことをしています。前後のポイントかポイント自身を用いて方向ベクトルの計算を行います。次に、方向ベクトルに直交するベクトルに幅を掛け合わせてセクションの両端を求める、というものです。各ベクトル計算の詳細についてはゲームの作り方のナゾレバを参照してください。コラム:RequireComponentメッシュを作成、表示する場合MeshFilter、MeshRendererは必須であるということは渋谷ほととぎす通信さまの記事でも書かれていたとおりです。RequireComponentを使えば自分で用意したコンポーネントのアタッチ時に必要なものも自動でアタッチしてくれますが、途中でスクリプトを編集してもその内容は反映されません。そのため今回はまだ使いませんが、最初に必要なものをまとめてRequireComponentに含めています。先ほどは中心点とポリゴン用の頂点座標を設定できるようにしました。いう空オブジェクトを作成し、CurveLaserMakerコンポーネントを張り付ければPointsを自由に変更することができますね。数字を変更しても見た目は何も変わらないためこのままではイメージがし辛いです。そこで、次は各座標をシーンビューでプレビューしてみましょう。