はじめまして。アカツキゲームスのクライアントエンジニアインターンとしてお世話になりました、今井と申します。
今回とあるゲーム開発プロジェクトに6/6 ~ 6/24の3週間ほどお邪魔させていただきました。
本記事では、今回のインターンで私が取り組んだことや学んだことについて書きたいと思います。
インターン開始前
インターンの実施開始1ヶ月ほど前に、メンターの方とインターンの内容について事前面談を行う機会がありました。
その面談で、事前に勉強しておいてほしいものとしてUniRxとUniTaskがありこの本をアカツキゲームスさんから頂いて勉強しました。また、課題として触っておいてほしいゲーム等の指示もありゲーム会社らしさを感じました。
課題について
僕の配属されたプロジェクトでは、課題をあらかじめ用意してくださっていたのでそれに従って課題を進めることにしました。
提示された課題は大きく分けて2つで、1つがUIの裏地にぼかしをかける機能の実装、もう1つがデバッグ用のキャラクタービューワーの作成でした。
UIの裏地にぼかしをかける機能はある程度できていたものが既にあり、これの性能向上及び使用するアーティストの方の意見を参考に改修するといったものでした。
キャラクタービューワーの機能については、全く作成されていない状態から1から要件に従ってビューワーを作るといったタスクでした。
UIの裏地にぼかしをかける機能
既にUIの裏地にぼかしをかける機能はできていましたが、アーティストの方との意見交換で以下のような要望が得られました。
- UIの裏にUIがあったときにぼかしをかけても裏にあるUIがぼけない
- UIのぼかしのかかり具合を徐々にアニメーションさせたい
また、メンターの方とのミーティングで以下のような問題があることも分かりました。
- 今のぼかし機能だとゲームが実行されてから毎フレームずっと実行されてしまっている処理であり重い
これらを解決するために以下のように既存のぼかし機能を改修しました。
- ぼかしをかける前のテクスチャ取得タイミングをUIが表示された後にずらすことによってぼかし対象にUIまで含められるようにした
- ぼかしのかかり具合はテクスチャのアルファ値を時間で変化させることによって徐々にぼけて見えるようにした
- ぼかし処理がずっと実行されないように、ぼかしをかけるテクスチャを貼り付けるUIが表示される瞬間のタイミングを取ってきて一回だけぼかしの計算を行うように変更
キャラクタービューワーの作成
キャラクタービューワーの作成は、何も作成されていない状態からデバッグメニューに機能を追加するといったもので、エンジニアの方との用件定義で以下のような仕様にすると話しました。
- エディタと実機の両方で確認したい
- キャラリストやモーションリストをプルダウンから選んで再生できるようにしたい
- マウスやスマホのタッチ操作でカメラの移動や回転を行いたい
プロジェクトの規模が大きかったのでデバッグメニューを扱うコードがどこにあるのか調べるのに時間がかかったり、機能をどこにどのように実装すればいいのかが分からず実装に苦戦しました。こういった開発経験は初めてなのでかなり勉強になる部分が多かったです。
インターン期間終盤に、自分なりに考えて1通り機能を実装したものを実機でビルドしてエンジニアの方にフィードバックを貰いました。
私が考えて実装していたカメラ操作は1本指スワイプでスワイプしている間ずっとカメラ移動をし、キャラクターの回転はボタンを押して操作するといったものでした。
フィードバックの結果、カメラ操作は2本指スワイプでスワイプした移動量分だけカメラ移動をするように、キャラクターの回転は1本指でスワイプした分だけ回転させるといった実装に変更することにしました。
この操作周りの仕様は、具体的な指示があったわけではないので自分で考えて実装した部分だったのですが、結果的に改修することになったので作り始める前にあらかじめ相談してどういった入力にするのかを決めた方が良かったと感じました。
キャラビューワーの方は、最終的に要件に加えて追加でアニメーションの再生やライティング調整の機能を追加しプルリクエストを本番環境ブランチにマージするところまで出来ました。
インターンを終えて
リモートワークならではの取り組み
今回のインターンは、初日と最終日のみ出社してそれ以外は完全にリモートで行いました。インターン前はリモートワークだとコミュニケーションが疎かになったりするのではないかという心配がありました。
しかし、私の所属したチームでは朝にあさまると呼ばれるチームのメンバーが各々が好きな物事を紹介する時間があったり、事前に趣味のアンケートをとって似たような趣味同士の人でブレイクアウトルームを作って話し合う機会などがあり、チームの色々な人を知ったり交流することができました。
また、チーム全体で誰かが発信したときにそれにリアクションするということが徹底されていると感じました。例えば、Zoomで発表する時があったのですが沢山メンバーの方がコメントをつけてくださり、リモートながらコミュニケーションを相互に行いつつ発表することが出来ました。
研究活動等でリモートで発表することは多々あるのですが、何も反応がつかず寂しい思いをするといったことが多くあったのでこういった文化が形成されていることは素晴らしいと思います。
反省点
チームによって方針がかなり違う部分があり、僕のチームはかなり自主性を重んじる文化で基本的に個人の裁量に任せてくれる部分が大きかったです。
したがって、仕様をどうしたらいいかよく分からない部分は基本的に自分から聞きに行く必要がありました。しかし、あまり自分から聞きに行くことができず結果として時間の無駄になってしまう部分があったことが反省です。
しかし、この個人の裁量に任せてくれるという部分はプラスに働いていた部分もあると感じていて、どのように実装するのかといった部分から自分で考えて自由に実装することができたところもありました。特にキャラビューワーは自分でこうやりたいと考えた機能を追加できたので良かったです。
良かった点
私にとって、実際に機能を使うアーティストの方から意見をもらいつつ自分で改善案を考えて実装するといったサイクルを体験できたことは非常に価値のあるものでした。
私は今まで個人で開発することが多かったので、ブランチを切って実装、プルリクを上げてレビューしてもらう、修正する、マージするといった一通りの流れを経験できたことも新鮮でした。特にレビュー内容は気付かされることが多くかなり学びになったと思います。
また、インターンを通して自分のスキルで足りていない部分と通用していそうな部分が分かり、社会に出る前にどういったスキルを学ぶべきかの方針がついたことも良かったです。
ゲーム系のインターンに関して、実際の環境で業務を行うといった内容を実施している企業さんが少ないためアカツキゲームスさんのインターンは貴重だと感じます。
最後に
メンターの方をはじめとして、関わってくださるチームメンバーの方々がとても暖かく楽しくインターンを行うことができました。3週間という短い期間でしたがありがとうございました。