大規模ゲーム開発現場とゲームエンジニアの働き方のリアル
皆さんこんにちは、レオと言います!(@chocsar_tech)
この記事ではタイトルにもある通り、大規模ゲーム開発現場や、そこでのゲームエンジニアの働き方って実際どんな感じなの?ということについて話していきたいと思います🏃♂️
このnoteはサイバーエージェント22卒エンジニア内定者たちによるアドベントカレンダーの一記事として書きました!(2021/12/01)
明日以降、他の同期たちの記事もぜひご覧ください!
▶︎ CyberAgent 22新卒 AdventCalendar2021はこちら
自己紹介
レオです!
大学生の間はLifeisTech!という「中高生にITを教える企業」で、Unityメンターとしてインターンを続けながら、個人でもゲームを作ってきました!
就活を終え、来年の春からはサイバーエージェントのゲームクライアントエンジニア(Unityエンジニア)として働き始めます!(22卒入社)
このnoteで伝えたいこと
現在自分は、内定者アルバイトという形でサイバーエージェントのゲーム開発現場で1人のゲームエンジニアとして実際に働いています!
このnoteでは、これまでの自分の体験をもとに、「大規模ゲーム開発現場って実際どんな感じ?」「ゲームエンジニアの働き方って実際どんな感じ?」ということを伝えられたらなと思っています!
大規模ゲーム開発現場のリアル
まずは大規模ゲーム開発現場の「人」や「役割」の話
オフィスでの開発風景は本当にこんな感じです。大体50人から、多いところで100人くらいの規模で1つのゲームを開発しています!
役職もほんとに色々あって、エンジニア、デザイナー、プランナーと一括りに言っても、その中にはさらに細かな役割分担があります!
その中でも自分の役職であるクライアントエンジニア(Unityエンジニア)と呼ばれる人たちは大体10人ほど。
ただし、同じクライアントエンジニアという役職でも「役割」は様々!
インゲーム(バトル機能など)やアウトゲーム(ガチャ機能など)といった担当箇所でセクション分けされていたり、エンジニア全体のマネジメントをこなす「エンジニアリーダー」、高い技術力で全体を引っ張る「テックリード」など、細かな役割分担がされています!
このように、大規模ゲーム開発現場では本当にたくさんの人が多種多様な役職や役割を持ち、互いに協力し合うことで一つのゲームが作られています!
次は大規模ゲーム開発現場を支える「システム」や「仕組み」の話
いきなりですが、皆さんは「Unityでゲームが作られている」と思っていませんか?
実はこれは10%正解で、90%間違いです!😲
実際には、サーバーサイドエンジニアさんたちが作るサーバーやデータベースはもちろんのこと、デザイナーさんたちが作るアセット素材を管理する仕組み、アプリビルドの自動化ツールなど、Unityだけでなく多種多様なシステムや仕組みによって一つのゲームが作られています!
ここは個人開発をしてるだけではほぼ間違いなく出会わないものばかりなので、初めて実務に触れた時は衝撃だったのを覚えています...!
ゲームエンジニアの働き方のリアル
続いてゲームエンジニアの働き方の話
ここに僕が実際にやってる、「タスクをもらってからタスクを完了するまでの流れ」を書いてみました!
ここで大事なのは常にいろんな人とコミュニケーションをとっているということです。
実は、タスクをもらった段階では「何をどう実装すれば良いか」が全て明確に決まってることはごくごく稀で、他職種の人たちとコミュニケーションをとりながら、情報を共有したり、自分にとって必要な情報を揃える立ち回りが求められることが常々。
ゲームエンジニアの仕事とは「エンジニアの目線でコミュニケーションを取る仕事」と言っても過言ではないと感じてたりもします🤔
それくらいコミュニケーションはチーム開発の現場では超大事です!
最後はゲームエンジニアが扱う「技術」の話
実はゲームエンジニアが扱う技術は「ゲームっぽくなくなる」と感じています!
「ゲームっぽい技術」というのは例えば、コントローラでキャラを操作したり、Aボタンを押すと攻撃したり、など。
もちろんそういう実装も存在する(例えば『NieR Re[in]carnation』ではキャラを操作して壮大なマップを歩き回れる)けど、実装全体で見るとそういう実装はごくわずか。
じゃあゲームエンジニアは何を作っているのか?
具体例として『NieR Re[in]carnation』の「キャラ強化画面」の作り方を例に話していきたいと思います!
(画像はそこそこやり込んだ僕のアプリからのスクショです。笑)
※ 実際に中身の実装を見たわけじゃないじゃないので全部憶測です!
キャラ強化画面へ遷移するためのボタンを押す
⬇︎
キャラデータの一覧(List)をサーバーから受け取る
⬇︎
キャラデータが持つ「戦力」の数値でListをソートする
⬇︎
for文で1つ1つのキャラデータをスクロールビューにセットしていく
⬇︎
写真のような画面が完成!
何が言いたいかというと、ゲームエンジニアが扱う技術は「システムっぽくなる」と思っています!
局所的に見ると「何らかのデータを受け取って、加工して、返す」みたいな感じ。
大きくて複雑な機能(今回だと「キャラを強化する」という機能)を実現するために、そのような「小さなパーツ」をたくさん作って組み合わせる、というのがゲームエンジニアが扱う技術だと感じます。
というかそもそも、「ゲームを作る」ということの大部分は「ゲームっぽい技術」ではなく「システムっぽい技術」が占めているのが事実だと思います!
そしてそのためには、言語そのものへの知識、コーディングや設計の技術といった「深い技術」が大事になると、現場で働きながら痛感しました!
まとめ
大規模ゲーム開発現場は、本当にたくさんの人が様々な役割を持ち、Unityだけじゃなく様々なシステムや仕組みによって1つのゲームが作られています!
その中でのゲームエンジニアの働き方としては、コミュニケーションがめちゃくちゃ大事だったり、システムっぽいものを作るための深い技術が大事だったりします!
最後にちょっとした感想というか自分個人の思いなのですが、
こうしてゲーム開発現場全体を見てみると、1人のゲームエンジニアというのは「小さな歯車」のようなちっぽけな存在だなと感じます...汗
だからこそ、その歯車を少しでも大きく、少しでも中心の歯車にできるように、これからも頑張っていきたいと思いました!
最後まで読んでいただき、ありがとうございました!!