[ミニゲーム製作日記]カメラを使って遊ぶ、ほのぼの探索ゲーム[unity1week]

PicSearch ミニゲーム

Unityroomさんのイベント「Unity1Week」に参加しました!
今回のテーマは「さがす」なので、
街中を歩き回りながら目標となる写真を撮影する」探索ゲームを製作してみました。
このリンクからプレイができます(評価やコメントが頂けると非常にありがたいです!)。

実装内容

プレイヤーの基本的な操作

基本的な3Dアクションゲームで見られる、視点方向に対応したプレイヤーの操作を目指しました。
といっても、スクリプト自体は主にfilmStormさんのMovement Input Scriptを参考に作成したので、詳細は割愛します。ちなみに参考先のスクリプトはCharacterControllerを用いているので、利用時にはプレイヤーのオブジェクトにCharacterControllerコンポーネントの追加が必要です。

マウスでの視点の操作

プレイヤー視点の操作の実装は、全てCinemachineで行っています。
まずPackageManagerからCinemachineをインポートし、その後、CinemachineタブからCreate FreeLook Cameraを選択してプロジェクト上にCM FreeLookオブジェクトを作成します。


次に、今作成したオブジェクトのインスペクタ上で、Follow項目にプレイヤーオブジェクト、LookAt項目にプレイヤーの頭部オブジェクトを選択します(頭部ではなくプレイヤーに設定した場合、カメラがプレイヤーの足元を追ってしまう挙動が起こるため、このように設定しています)。

またインスペクタ上のAxisControl項目でマウス入力を取得することができます。X/Y軸の両方のInput Axis Nameに対応させたい入力名を設定することで視点操作の実装が完了です。入力自体を反転させたい場合は、Invert項目にチェックを入れることで出来ます。

このようにCinemachineは全くコーディングせず、かつ少ない作業だけで3Dアクションゲームっぽい視点操作の実現が可能であるため、非常におすすめできるパッケージです。

撮影モード

撮影モードは、プレイヤーオブジェクトの視点に相当する位置に、virtual Cameraを用意し、二つのカメラの優先度をスクリプトで制御する、といった方法で実装しました。

ChangeCameraTimeメソッドの85,90行目でPriorityの値を変えています。最初に実装したマウス操作可能なカメラはデフォルトでPriorityが10になっているため、撮影モードに変更する場合は10よりも大きい値にしています。

55行目からのTakePictureメソッドで実際に撮影を行っています。58行目では、RenderTextureというランタイムで更新可能なテクスチャをスクリーンサイズと共に定義します。このRenderTextureをMainCamera.targetTextureに代入することでメインカメラ(優先度が高い方が映るカメラ)の映像をテクスチャに映しています。

次に出題写真との整合を取るため、撮影した画像を一度データとして保存する処理を実装しました。
61~63行目ではtargetTextureをピクセル単位で読み込み、64行目でこれをPNG形式のデータに変換し、バイト配列のデータに代入しています。
このデータを75行目からのShowImageメソッドで映したいテクスチャに代入し直すことによって、任意のテクスチャに撮影画像を表示しています。

撮影処理に関しては、株式会社シャルーンさんの【Unity】ゲーム画面のスクリーンショットを撮影し、UIとして使用するという記事を参考に実装しました。

目標写真の出題と撮影画像との判定

お題となる写真は3,4枚ほど用意し、ランダムに選択するようにしました。
また、撮影した画像と整合性を図る方法として、プレイヤーの角度・位置情報と、予め用意した出題用の写真とセットの情報とで比較する手法を採用しました

まとめ

今回製作したゲームは、イベント期間中に30人の方に評価して頂き、以下の画像のような評価結果を得ることができました。
お世辞にも、良い結果であったとは言えませんが、個人的に前回と比べると良い結果であったので、自分としては成長を実感することができました。

また自分で実装していて納得できていなかった操作性の部分が、ゲームの評価にも顕著に表れていたので、やはりこれから重点を置くべきポイントであるように感じました(イベントでのランキング上位を占めるゲームは軒並み操作性が良かったので、このことを痛感しました)。

自分にとって、普段あまり多くの方に製作したゲームをプレイして頂くことがないため、このような機会を提供してくださるUnityroomさんには本当に感謝しかないです!
また今回のイベントを通して自分のゲームをプレイして頂いた皆様本当にありがとうございました!
次こそはランキングに入ってみせます!!

使用したアセット&素材

3Dモデル

アニメーション

UI

色々アセットを用いてきましたが、最近被りがち(特に3Dモデル)なので、そろそろ素材の自作にも挑戦すべきだなと感じました。あとUniRxの知見を少し得られたので、それもどこかで取り入れてみたい…

コメント

タイトルとURLをコピーしました