初めまして、アカツキのクライアントサイドのインターンに参加させて頂いた植村と申します。
今回、7/12〜7/30の13日間、開発に参加させていただいたので、取り組んだことや思ったことについて書いていこうと思います。
はじめに
自己紹介をします。
私は今、早稲田大学修士1年でVRについて研究しています。
趣味はゲームをプレイすること、制作すること、それからロボットです。
将来はゲーム開発に関わる仕事を志望しており、今回はUnityエンジニアとして参加させていただきました。
取り組んだこと
僕が参加したのは、「八月のシンデレラナイン」(以下ハチナイ)の現場でした。
そこでメンターの方と話し合い、主に選手交流周りの改修を任せてもらえることになりました。
それぞれタスクについて書いていきます。
選手交流で悩み解消前のテキストを読めるようにしたい
インターンで初めて取り組んだタスクです。この悩み解消前テキストというのは、選手育成から解消してしまうとゲーム内で見る手段がなくなってしまうものでした。それに対し、選手交流における悩み解消時再生エピソードに付随させられるようにするというタスクです。
まず最初に行ったのはデザイナーさんとプランナーさんとの会議です。そこで仕様を決め、実装に移りました。
実装をする中で現場で作られてきたコードに触れながら、理解を深めました。
コードの意味や実行速度について、ここまで深くやったことはなかったのでとても良い経験になりました。
この機能の中で特に苦労したのは、ストーリーのエピソードのIDから悩み解消前テキストをマスターデータから検索してもってくるところでした。
結果としては
エピソードのIDに一致する悩み解消時エピソードを持つシーンのスキルを検索
→そのシーンのスキルを持つ悩みを検索する
→悩みが持つテキストを取得
という流れだったのですが、マスターデータの関係が複雑で、どこにどの情報が入っているのかを理解するのに時間がかかりました。
ここで思ったのは、自分が欲しい情報、データがどこにあるのかをコードから予想して見つけてくる力がとても重要なんだな、ということでした。
他の人が書いたコードを読むときの考え方というものをこのインターンを通じて知ることができました。
その後も一度会議をして、アイコンの追加などが決まりました。
自分からは表示するダイアログのタイトルを悩み解消前のスキル名にすることを提案し、実装することになりました。
実装してPR→レビューの流れを何度か繰り返し、実機確認もしてなんとか終えることができました。
最後に検証さんの方に機能の検証依頼を出して終了です。
仕様決定から検証依頼までの流れを一通り体験できてよかったと思います。
選手交流の詳細で、隣の選手に移動したい
次のタスクは、選手交流の各選手に遷移した時、そのまま別の選手に移動したいというものでした。
プランナーさん、デザイナーさんと会議をした結果、ボタンとスワイプで移動すること、選手の並びは選手交流トップに倣う形にすることが決まりました。
まず最初にやったのは、隣の選手へのスワイプ機能、ボタンの機能の実装です。
ハチナイにおいて、似た形のスクロール処理はいくつかあり、今回はその中からデレストのオーダー選択と選手交流トップのスクロールを参考に作ることにしました。
機能について理解しながら、基本となる部分は実装できました。
が、気になる問題点がいくつか見えてきました
選手の切り替えで読み込み時に、選手とメニューが一瞬消えてから表示されるのを改善
もともと動かすことを優先してシーンが開始する時の処理を毎回呼び出していたが、必要なものだけに絞って、メニューが消えるのを阻止しました。
スクロール完了と共に、スクロールを中心に戻しつつ、選手を表示するGameObjectの位置を交換することで更新時、選手の読み込みを新たに増えた一人分だけにするようにしました。
これにより、選手の更新は画面外のみで起こるようになったので、選手が消える問題も解決しました。
隣の選手へ遷移するのに必要なスワイプの移動量の調整
もともと参考にしていたスクロール処理では隣の選手との距離の半分を超えてドラッグしていたら移動という感じだったのを、距離に対するスワイプの移動量の割合を、あらかじめ設定した閾値を超えるかどうかで判定するようにしました。調整をできるようにするとともに、閾値を大幅に下げました。
選手交流の円環リストに対応する
選手交流トップにおいて、本校では有原と草刈がつながる形の円環のリストとなっています。対して、コラボ選手、ライバル校は手に入れない限り人数が少ないので、その場合同じ選手が画面に並んでしまう事になります。
それを避けるため、本校以外のカテゴリーには端があります。
このようにカテゴリーから対応を変える処理をするためにプレイヤーが所持しているカテゴリー別の選手のリストを作る必要がありました。
選手リストはマスターデータから持ってくることになりますが、コラボとライバル校のどの選手を表示出来るかを知るには、APIを叩く必要がありました。
選手交流トップの方でこの処理をしてカテゴリー別所持選手リストは生成されている上に、選手交流詳細では選手交流トップで使うリストと同じ選手の並びを使いたいということもありました。なので、もうあるのならばそれを使わせてもらおうということで、円環リストは選手交流からシーンの遷移時に渡してもらうことにしました。
選手交流詳細から絆アルバムと信頼度のページに行った後、戻るボタンで戻ると正しい選手に戻らないことがある問題の改善
スワイプでの移動は関係なく、選手交流詳細のページに入った時の選手になるので、戻るボタンに選手交流詳細から来た時のみ、どの選手に帰るか指定する関数を渡しました。
円環リストを生成する中で、リストも渡さなくてはいけなくなりましたので、シーン遷移時にリストを持っていない場合、APIを叩いてリストを生成するようにしました。
その他にも作業する中で、確認していると、気になる点や機能の追加によって動かなくなる点をいくつか見つけました。ページのスワイプがボイスや課題メニューの時に出来てしまうことや、スワイプ後に表情がリセットされていないことを発見し、メンターの方に報告して修正を行なっていきました
この機能では、機能実装→レビューなどで問題点を発見→修正を多く繰り返しました。
最初はコードを見て、仕様通りになるように実装するのが精一杯といった感じでしたが、繰り返すうちにだんだん自分で問題点を見つけて、共有し、修正するということが出来る様になって成長を感じることが出来ました。
振り返り
インターン中に思ったことや感想について書いていきたいと思います。
開発が進んだ現場に入るという体験
朝会、夕会は雑談から入るのですが、毎回様々な話題で盛り上がっていて雰囲気が良いな、と思いました。その後は、共有事項などについてしっかりと話し合っていてメリハリがあるなと感じました。和気藹々としながらもやるべきことはちゃんとやって、全員がゲーム開発チームの一員だと思って仕事をしているのを見て、こういう風に働きたいなぁと思ったりしました。
Gitの使い方(PRの出し方やブランチの分け方など)やリポジトリの使い方など小規模開発では、意識しない所で数多くの工夫が見られ、驚きました。
他者が書いたコードを読み込むという経験をあまりしてこなかったのですが、他者のコードを読む際には、ただ漠然と理解しようとするのではなく、自分が今何を知りたくて、その情報はどこにあるのかを考えながらコードを読むことが、大事なのだと気づかされました。
現場の雰囲気や大規模開発のコードの読み方は、このインターンに参加しなければ得られなかった貴重な学びとなりました。
他の職種の方との会議
ゲーム開発においては、各職種が連携して作り上げて行くというのはもちろん知っていましたが、どのようにそれを成すのかは、あまりイメージができていませんでした。
今回インターンに参加してみて、そのことについて実感が湧きました。これも参加してみないと分からない点だと思うので実感できたのはとても良い経験になりました。
大きなゲームの中の機能を作る楽しさ
私のゲーム開発の経験は大体が半年後に向けて動くゲームを作るといった短いスパンのものでした。そうした場合まずは最低限動くものを目指すこととなり、小さな、完成度を高めるための開発の経験が積めていませんでした。
こういう経験を積めるのは、もう既に動き出しているプロジェクトに参加したからこそなので、知ることが出来て良かったです。
大きな一つのゲームの中で、自分の実装した機能が動いているという喜びは初体験でしたが、とても良いものでした。
反省点
もともと用意されていた課題のうち一つを達成できなかったことです。これの原因は、必要な情報がどこにあるのかを予測し、調べるのに手間取ったことと自分が今何で詰まっているのかをメンターさんに上手く共有できなかったことだと思っています。
自分で調べることはとても重要なのですが、実はちょっとしたことで詰まっているということがインターン中に結構ありました。
悩んでいることをただ書いておいて、手が空いている人が見てアドバイスをする、という場所がちゃんと用意されていたのに上手く使えていなかったなという反省点があります。
これからは作業に没頭するのではなくて考えをアウトプットするのをもっと意識して開発したいと思います。
まとめ
反省点はあるものの、ゲーム開発の現場についてよく知ることができ、チームで一つのゲームを作るとはどういうことかを知ることができました。
現場で使われているコードに触れたおかげで、コードを読む力、書く力共に大きく成長できたと思います。
やはりゲーム開発は楽しいです!
たくさんの収穫を得られた良いインターンでした、3週間受け入れてくださりありがとうございました!