ぱぴブログ

さんたろのブログ

ゲーム開発が好きな人のひとりごと

DeNAサマーインターンシップ2020 ゲームエンジニアリングコースに参加してきました

みなさんこんにちは。
さんたろです。

この度、DeNAサマーインターンシップ2020 ゲームエンジニアリングコースに参加してきました!

dena.snar.jp

概要

1日で、事前に提出した制作物を、メンターさんの助言を頂きながらブラッシュアップする、という内容でした。
私が今回提出した制作物は「SpaceJumpGame」という、Unityを用いて制作していた3Dスクロールアクションゲームです。
↓詳しくはこちらをご覧ください。

https://www.notion.so/papyrustaro/SpaceJumpGame-6db29530078442e38d5560800fdb0f69

参加前の制作話

このゲームは制作開始から一般公開まで1か月ほどでした。
いつも私の作ったゲームを最後までプレイし、細かいところまでチェックしてくれる友人が居て、 今回は今まで作ったゲームの中で一番バグ報告・意見要望がありました(いつもありがとう)。
特に3Dアクション故の操作感の悪さ、当たり判定の処理に関するものが多かったです。

着地した瞬間にジャンプなどの、瞬時の状態遷移、
回転アニメーション中の頭と接地の判定、
感覚と違う入力による処理、
カメラ操作の使いにくさ、などなど...

DeNAさんからの贈り物

インターン参加者に向けて、素敵な贈り物まで用意してくださりました...
当日は頂いたTシャツを着てました^^

f:id:papyrustaro:20200916112900j:plain
DeNAさんからインターン参加者への素敵な贈り物

インターン当日

メンターさんからの助言

インターン当日、自己紹介のあと、参加者数人とメンターの方1人のチームに分かれました。
制作物のどこをブラッシュアップするのか相談し、そのあとはひたすら作業といった流れでした。
メンターさんから「手動で動かしているカメラを自動にしたらどうか」という案をいただき、自動カメラワークの実装をおこないました。

もともとこのゲームは、カメラの回転をあまり利用する必要がないようなステージにしており、手動のカメラ操作でも十分かな、と考えていたのですが、
カメラの操作をプレイヤーの意識から外すことで、よりアクションを集中して楽しめる」というメンターさんの意見を聞き、間違いないと思いました。

実装

自動カメラ切り替え

「特定の地点になったらカメラを切り替える」という機能はCinemachineとBoxColliderによる衝突判定で実装しました。
CinemachineVirtualCameraはPriorityやenabledの変化によって、自動でいい感じに切り替わってくれるため、BoxCollider内で衝突したのがPlayerなら予め指定していたVirtualCameraを映すように処理、といった具合で簡単に実装できました。
各カメラの角度や距離、追跡具合やTargetをカメラのどこに収めるか、などはInspector上から設定できるのも、便利ですね。

手動カメラ回転

もともとあったカメラの手動回転機能ですが、もともとカメラのインスタンスを、シングルトンとしてstaticで持っていたのですが、カメラが複数になったため設計から変更する必要がありました。
良い子はシングルトンに頼ってはいけませんね...(仕様変更で複数になったときに大変です)
カメラ手動回転の仕様として、「水平方向に移動していないときのみ、手動回転ができる。移動を開始するとデフォルトの角度に戻る」というものにしました。
棒立ちかジャンプ中は、360°見渡すことができます。

デフォルトの角度と現在の角度の差分を、DOTweenを用いて回転させることで滑らかに元の角度に戻すようにしました。
ポーズ画面中などは元の角度に戻すカメラ回転も停止したかったので、Tween型のフィールドを用意し、OnKillでフィールドをnullにすることで、ポーズが始まればTweenのPause()で停止、ポーズが終わる且つTweenがnullでなければPlay()で再開という実装にしました。

手触り

実際に動かしてみると、自動でカメラが切り替わっていくのが臨場感あって想像以上に良かったです。
見ている側からは些細な変化かもしれませんが、プレイしている側からは、かなり変わったかな、と思います。
そして操作する項目が減った分、より初プレイの人にも優しくなったはずです。

そのほか

今回のインターンでは、社員の方(特にメンターさん)と話す機会が多く、DeNAさんの社風や姿勢、各社員の方がどんな仕事をしているのかなど知ることができました。
特にDeNAさんの、現状維持ではなく、より良くするためにはどうすればよいのかを常に考え、実行する姿勢は自分に合っていると感じました。
また、エンジニアが使用するライブラリの作成や、更にライブラリ作成のためのライブラリの作成などの仕事も、面白そうだと思いました。
同じチームのもう一人の参加者とメンターさんとの会話をずっと聞いていたのですが、設計思想の話などが多くとても楽しかったです^^

おわりに

1日と短い期間でしたが、制作物は大きな改善ができ、DeNAさんについても以前より知ることができましたので、とても充実したインターンでした。
インターンのために準備・運営してくださった社員の方々、本当にありがとうございました!!!

9月中は厳しいですが、ブラッシュアップしたゲームを公開しようと考えています。
→修正したものを公開しました(2020/09/26)