この記事はUnity #2 Advent Calendar 2020、17日目の記事です。
昨日は@drumath2237さんによる、「【Unity】muscleを使用した指制御入門」でした。
今回はUnityネタをやっていきます。テーマは「Unityでスコープをつくる」です。
アクションシューティングゲームでは銃にスコープがついていますが今回はこれを作っていきます。
そのまま望遠鏡として使うだけでなく、監視カメラの映像を写したりと応用もできます。
仕組みとしてはRender Textureを使います。
使用アセット
今回はこちらのアセットを使用します。スナイパーライフルの3Dモデルです。
スコープの作成
Cameraの映像をRender Textureに書き出し、レンズに出力するとこまでやってみます。
Render Textureは画像や映像をリアルタイムで描画できるテクスチャです。Unityマニュアルから引用。
Render Texture (レンダーテクスチャ) は、ランタイムに作成、更新される特殊な テクスチャ です。使用するには、まず新しいレンダーテクスチャを作成し、カメラ の 1 つを指定して、そこにレンダリングします。次に、通常のテクスチャのように、マテリアル のレンダーテクスチャを使用できます。Unity Standard Assets の ウォーター プレハブは、リアルタイムの反射と屈折を作成するために、レンダーテクスチャを現実世界で使用する例の 1 つです。
CameraとRender Textureの作成
Main Cameraとは別に、スコープ用のCameraを作成します。
Cameraはライフルのスコープの先端当たりに置いておきましょう。
(Audio Listenerが2つあるとエラーがでるため注意)
ProjectビューにRender Textureアセットを作成します。
スコープ用CameraのTarget TextureにRender Textureを紐づけます。
これで、Renderer TextureにCameraの映像が出力されます。
Materialの作成
レンズに表示するためのMaterialを作成します。
Materialを作成せず直接Render Textureを貼り付けてもいいですが、
シェーダーを適応したり細かい調整を行いたい場合はMaterialの方が便利です。
Materialを作成したら、AlbedoにRender Textureを紐づけます。
これでMaterialは完成です。
Render TextureをCylinderに表示
レンズ型のオブジェクトがないのでプリミティブのCylinderをレンズの形に改造して使用します。
Y軸のScaleを小さくすることでレンズ状にできます。
作ったレンズは、スコープの手前側に配置します。
CylinderのMesh Rendererに作ったMaterialを与えるとCameraの映像が描画されます。
今回はスコープですが、監視カメラの映像をモニターに出したい場合はQuadがオススメです。
Quadは映像や画像を出力するのに向いているオブジェクトです。
スコープの見栄えを変える
明るく表示する
Standardシェーダーをパラメータを変えずそのまま使っているので、Directional Lightによっては暗く表示されてしまいます。
Emissionを有効にすると発光し見やすくなります。
細かい色味などはカラーピッカーから調整できます。
ライティングの影響を完全に無視したい場合はUnlit/Textureを使うのも手です。
Cameraをズームする
CameraコンポーネントのField of View(FOV)の値を調整することでズームできます。
値を小さくするとズームイン、大きくするとズームアウトされます。
ポストエフェクトをつける
スコープ用のCameraにPost Processing Stackなどをアタッチすることで質感を出すことができます。
Vignetteがおすすめ。クロスヘアもあるといいですね。
銃のスコープとして使う場合
銃のスコープとして使うには少し工夫が必要です。
スコープにあるCameraの位置と弾の生成位置が異なるため、そのままだと狙った場所にあたりません。
それで、カメラをキャラクターとズラしたのがTPSで、キャラクターが見えるから立ってる足場が分かりやすいし、キャラ好きのユーザーにも嬉しい。格好いい近距離攻撃が出来る。でも、当然カメラと同じ角度に撃たせるとズレてしまうわけだよね。 pic.twitter.com/6EG4MGEzXV
— 尾野(しっぽ) (@tail_y) 2016年4月30日
これについては、以下のtogetterで@tail_y氏のツイートがまとめられています。
銃のスコープに使うのならば、スプラトゥーンのように銃の射線上にrayを飛ばし、
当たった場所にCameraを向ける方法がよさそうです。
時間がないためソースコードなどはあとで
その他 おすすめアセット
FREE PBR Security Camera
監視カメラとモニターのモデルが含まれている無料アセットです。
同じくRender Textureで監視カメラを再現しているデモシーンが含まれています。
Low Poly Weapons Pack + Sight Shader
スコープ付きライフルはこちらのアセットがおすすめです。
モデルの種類が多く、スコープ用シェーダーもついていて便利です。
有料アセットですが、2019/2/4~4/11まで無料だったため入手していた方はラッキー
VRでも試してみる
作ったスコープ付きスナイパーライフルと上で紹介したFREE PBR Security CameraをVRで試してみました。
スコープと監視カメラが問題なく動作しています。
監視カメラのアセットには、この記事と同じようにCameraとRender Textureが設定されています。
スマートフォンはQuadを画面部分に張り付け、監視カメラのRender Textureをマテリアルとして与えています。
VRの注意点として、スコープを使う場合はプレイヤー側のCameraのClipping PlanesのNearを小さくする必要があります。
でないと、スコープをのぞくときにめり込みます。
以上です。
スコープや監視カメラなどにぜひお役立てください。
明日のUnity #2 Advent Calendar 2020 担当は@neusstudioさんです。
参考資料
去年のUnity Advent Calenderの記事はこちら
わかりにくいところなどがありましたら、コメントにお願いします。