こんにちは。2021/8/10〜2021/8/27の3週間、アカツキゲームスのサマーインターンに参加させていただいた佐藤と申します。今回はインターンで取り組んだこと、学んだことについてまとめていこうと思います。
自己紹介
北海道情報大学に通う学部3年生です。普段はUnity、C#を使ってゲーム開発を行なっています。
私の実力が実際の現場でも通用するか、実際の開発現場はどのようになっているのか、また、自身のスキルアップのために今回のインターンを志望しました。
取り組んだこと
私が参加したのは『八月のシンデレラナイン』(以後ハチナイ)というゲームの現場でした。その中でも主にUI関係の改修タスクを行いました。
ミッションリストの順番変更
最初のタスクはミッションリストのソート機能です。今まではすでに終了したミッションでも一番上にきており、初めてきた人が迷いやすい状態でした。なので、終了したミッションは下に来るように変更します。
やることとしてはミッションUIを表示するためのミッション一覧を取得している部分を見つけ、そこに終了していないミッションが上に来るようにLINQでソートする機能を差し込みます。
ブレークポイントを使ってUI表示メソッドから一覧を取得している場所を特定し、その日のうちにプルリクエストを出すことができました。
報酬受け取り期限の表示/非表示
次に行ったタスクは、ミッション期間内のタスクはミッションの報酬受け取り期限を表示しないようにするタスクです。
これは、「ミッション挑戦可能な期間中に受取期限を挑戦期限だと勘違いして、思ったより早めに挑戦できなくなってしまった。」という事故を防ぐための変更です。
受け取り期限のオブジェクトをアタッチするGameObject変数を追加し、ミッション一覧を表示した時に表示、非表示の判定を行いました。
こちらもその日のうちにプルリクストを出すことができました。
ランキングマッチでの選手ボーナスでのソート機能の追加
次のタスクはランキングマッチでのみ、オーダー変更時の選手一覧で選手ボーナスでのソートをできるようにします。
ランキングマッチで選手ボーナスを活用したい時に便利な機能となります。
こちらのタスクは非常に厄介な部分があります。それは「ランキングマッチでのみソートのボタンを出現させる」という機能です。今まではただソートの一覧を表示しているだけでよかったのですが、今回の変更で前のシーンがランキングマッチなのか、通常マッチなのか、選手強化画面なのかについて知る必要が出てきます。この前のシーンがなんだったのかについての取得、判定に非常に苦労しました。実際、この調査だけで3日もかかってしまいました。
その後、関係するメソッドのシグネチャの変更や、ボタンの選択時のバグ修正などを行いプルリクエストを出すことができました。
練習中の選手の一覧表示
現状の練習画面での練習メニュー表示は、選手の数のみ表示されており、具体的にどの選手が練習しているかは表示されていませんでした。
そのため、練習中の選手を表示するダイアログを作成します。
こちらは練習メニューの表示機能で必要な情報が渡されていたため、ダイアログとその表示ボタンを作成し、ダイアログを管理するメソッドを呼び出すだけでした。
こちらはdevelopブランチとシーンのコンフリクトを起こしていたので、それを解決し、プルリクエストを出すことができました。
一度習得したスキルは自由に付け替え可能にする
現状でスキルの入れ替えを行いたいとき、そのスキルが過去に習得済みであったとしても、入れ替え時にアイテムの消費がされていました。それを過去に習得していたスキルなら自由に入れ替えができるようにする変更です。
このタスクは今回のインターンの中で一番重いタスクでした。
なぜなら、選手の情報を取得するAPIには現在習得しているスキルの情報しかなく、「スキルは習得しているが設定はしていない」という情報が含まれていないからです。
そのため、サーバーサイドと連携してAPIの変更とクライアントサイドの変更を同時に行わなければなりません。今回は同じ期間でサーバーサイドのインターンをやっている方と協力し、APIの仕様変更について話し合い、実装を行いました。
クライアント側の実装としてはスキル入れ替えボタンの表示や、スキル入れ替えダイアログの表示、スキル入れ替えAPIを叩くことなどがありますが、こちらは比較的簡単に実装することができました。
インターンの最終日の前日に実際にサーバーとの結合テストを行い、無事仕様書通りの挙動をしてくれました。
調査や実装する量が多く、大変な作業でしたが、サーバーサイドの方と協力してできたことは良い経験だったと思います。
まとめ
実際の開発の雰囲気を知れた
現場での開発に入ったことで、開発のフローや雰囲気など、なかなか知ることができないようなことを体験できました。
具体的なデザイン手法を知ることができた
APIの呼び出しやダイアログの作成などで、より便利になるようなデザインパターンを見ることができました。このような手法は個人開発ではなかなか思いつくものではないので、非常に参考になりました。
大規模開発ならではの悩みがあること
コードを読んでいるとリファクタしたい欲に駆られることがあります。しかし、安易なリファクタは思わぬ不具合を招くこともあります。特にこのような大規模開発ではどこにどう影響しているか正確に把握することは困難です。そのため現状のコードを保ちながら目的の変更を加えるかを考えていました。動くコード=正義ということを痛感しました。
最後に
始まる前は長いなーと感じていたインターンでしたが、実際に始まってみると本当に早く時が過ぎていきました。その中で完遂することができなかったタスクもありますが、大変有意義で楽しいインターンでした。
短い期間でしたが、本当におせわになりました!