今回FUKUOKAゲームインターンシップに参加させていただいた、名古屋工学院専門学校でゲームプログラミングを学んでいる平野孝明です。私は高校生のころにプログラミングに興味を持ち、身近でいつも遊んでいたゲームのプログラムに挑戦したいという思いからゲームプログラマを目指すようになりました。
今回のインターンシップに参加しようと思ったきっかけは、学校からFUKUOKAインターンシップの案内が来てGFF加盟企業のホームページなどを拝見し、実際に身近でこの職場の雰囲気を見てみたいと思ったからです。また、普段あまり関わることがない外部の方々やほかの学校の生徒と意見を交換でき、自分の今の実力や考え方を見直すきっかけになると思い参加を決意しました。
今回のガンバリオン様のインターンシップのテーマは「ゲーム制作におけるプロの問題解決手法を学ぼう」でした。今回のインターンシップはオンラインだった事もあり、いくつかのチームに分かれて意見をまとめるグループワーク形式で行われました。グループワークでは実際に企業で起こる問題に対してチームで意見を出し合い、意見をまとめて発表し、スタッフさんからの講評という進行で進んでいきました。
私はこのグループワークの問題の中でもゲームのマップデータのメモリ管理の問題が一番印象に残りました。
この問題ではゲームの中で主要な場所となりクオリティを求めたいランドマークの場所を特定の位置において複数読み込む状況があり、読み込みが行われるとメモリの使用量がオーバーしてしまうという前提が出されました。
これに対して私たちのチームは、メモリに不要なデータが乗っていることが問題点だと考え、その解決策として、ランドマークを構成する情報をできるだけ少なくするためにメッシュの削減や当たり判定の数を減らすという結論になりました。
しかし、結果から先に言うとこれだけでは対策としては足りませんでした。各チームの発表が終わり実際にどのように解決したのかの手法を聞いたときに私は衝撃を受けました。その解決手法が、プランナーやアーティストと協力してメモリの使用量を減らすというものでした。
一例としてアーティストはランドマークを組み立てたときに見えない無駄なメッシュを減らし、プランナーはランドマークを複数読み込まないようにランドマークの位置を調整することによって、本来プログラマの解決しなければならない問題を共に解決することができるようになると解説を受けました。
私はこの解説を聞いたときに自分の視野の狭さを実感しました。私の中ではメモリ管理はプログラマのみが理解していてプログラマが解決しなければならないという考えがずっとありました。しかしこの解説を聞いて改めて考えてみると、ゲームは一人で作るものではなくプロジェクトにかかわっている全員で作り上げるものだと思い、そこに技術力の差はあれいいものを作りたいという思いに差はないと考えました。この考え方はインターンシップの中だけでなくチーム制作をするときや実際に業務にかかわることになった時にも一生必要な考え方だと思いました。
今回このインターンシップに参加して、一日だけでしたがとても有意義で今後のチーム制作の心構えを学べた貴重な時間になりました。また、普段は自分の使う技術に対して学ぶことが多く、今回の問題のような業務で実際に使う技術を学べたのがとても新鮮でした。このインターンシップを通じて学んだ技術を使いこなせるように頑張ろうと思います。
最後になりますが、今回このインターンシップを開催してくださったガンバリオン様、本当にありがとうございました。
プログラマーコースの最近のブログ記事
こんにちは。京都コンピュータ学院の和田真樹です。
私は将来ゲーム業界に就職したいと考えています。そのため今回は数多くのゲーム企業が集うGFFのインターンシップに参加させていただきました。
インターンシップのテーマは「ゲーム制作におけるプロの問題解決手法を学ぼう」でした。実際のゲーム開発で発生した問題を元にグループワークを行いました。それぞれの意見の中からグループで最も効果があると思うものを各グループ発表し、社員の方に講評していただく流れでした。
今回取り上げられたゲームのジャンルは以下の事が前提のオープンワールドのゲームでした。
・広大なフィールド
・目的地までのルートを自分で自由にユーザーが選択可能
・ロードなどの画面転換を挟まない
・村人、敵、建物、草、木などの膨大なオブジェクトが配置されている
これらを踏まえて、実際に起きた問題について考えました。
プログラマーとして解決策をどうするべきなのかを考えながら取り組んでいました。
問題の1つにランドマークと呼ばれる主要エリアが3つ重なっていてロードされるデータの量が多く、メモリが圧迫されるというものがありました。
私は建物の内部などの不要部分はロードを行わないという解決案を出しました。エントランスなどの見えている部分だけをロードする区域に設定することでメモリ圧迫が解決できると考えたからです。自信満々だったのですが、実際に行われた手法を聞くと、プログラマーが行える手法だけではコストや時間がかかるため、協力してもらえる部分は他の職種の方に手伝ってもらい解決するという手法でした。私はプログラマーとしての手法に囚われすぎて、ゲーム開発はチームで行っているという前提を考えていなかったため当たり前を再認識することになりました。
最後の問題に、細かいオブジェクトを配置した際に当たり判定がすり抜けてしまうというものがありました。私達のグループは自機の当たり判定を増やす案と、オブジェクト同士の当たり判定を大きくする案の2つが出ました。私達は処理負荷を考慮した結果、後者を選びました。しかし、あるグループが発表の際に上記の案を2つとも出していました。1つ目の案で処理負荷がかかってしまう場合は2つ目の案採用する方針でした。その方法が講評の際に取り上げられていて、型に当てはまらない柔軟な考え方をしているインターン生がいることに驚いたと同時に対抗心が燃えました。
グループごとに発表することで洗い出される問題点や改善案が違ったので、開発においてこのように意見を出し合い、様々な観点で議論することでより良い作品に仕上がるのだと感じました。
その後、プログラミングダンジョンというプログラムのアンチパターンや論理的な問題10問を一問ずつ解いていくグループワークを行いました。
ルールは以下の通りでした。
・1階につき1問
・問題に間違えるとHPが1減る
・HPは10
・5分以上かかった階はスキップすることができる
・スキップにはHPを3消費する
慎重に挑みすぎて初めの階の問題に10分以上もかかりました。そのため、後半の問題は相談時間を短くすることを心がけました。問題の答えがなんとなくわかった人がいたらその人の回答を聞いて、反対意見がなければグループの回答としました。1度だけスキップを使いましたが、最終的に残りHPは6で8階までたどり着くことができました。
拝むことすらできなかった9,10階の問題は面談の時間を使って同じチームの方と最後まで粘って解きました!
今回のインターンシップでは学校とはまた違ったプロの現場で実際に起きた問題から思考するという貴重な経験を積むことができました。これからのゲーム制作に役立てていきたいと思います。お世話になった社員の皆様、ありがとうございました。
FUKUOKAゲームインターンシップのプログラマーコースで参加させていただいたアーツカレッジヨコハマのゲームクリエイター学科、中川 諒大です。
今回私は、自分とプロの方との差を知ることを目標とし、ゲーム業界で使われている技術を実際に体験し学ぶことや、学生とプロの方々との仕事への向き合い方の違いなどを知るために、今回のインターンシップに参加させていただきました。
今回のインターンシップでは、指導や実習以外にも会社説明や各部署のマネージャーとの座談会、社長とのランチ会などに参加しました。
座談会では、実際の現場での苦労話や大切なことを各部署目線でのお話を聞くことができました。
また、ランチ会では、現在の業界のことや、会社全体での開発等のお話などを聞くことができました。特に実習では、初めにいただいたプロジェクトの基盤のソースコードなどを見ることができ、制作作品に対してのフィードバックも得ることができたため、当初の目標でもあった自分たちとプロの方との差を技術的にも知ることができました。
また、指導担当者との交流の際には、開発でのやりがいや大変なこと、学生のうちに行っておくべきことなどを知ることができました。
これからは頂いたアドバイスを基に、ゲームをプレイする際にはどこがおもしろく、どこが足りないかなど分析することで、ゲームを見る眼を伸ばすこと。また、今後チームでのゲーム制作をする際には、クオリティを上げるためにも明確な目標などを定め、全員がぶれずに制作を行うことができるようにするなど、今回のインターンシップで得た知識や経験、アドバイスを今後の自身の制作だけでなく、就職活動やその先の実際の仕事にも活かせるように努力していきます。
■氏名:石津 旭
■期間:8/27(火)~8/30(金)
■タイトル:ゲームの完成と、インターンシップ終了
こんにちは!アーティストとして参加させていただきました。エフェクトアーティスト
志望の石津旭です。
今回の制作ではキャラクターモデル、リグ、モーション、エフェクトを担当しています。
(背景、エフェクトの一部は時間がなくアセット使ってしまいましたが...)
今回は制作したゲーム「Knock Out Cannon」の完成、そして後日談を書いていきます。
果たして、私たちはパッケージ化を成功させ完成させることができたのか...
■8月27日
元のマスター版の予定から5日遅れている本日、午前中にパッケージ化を実行。
その結果は...成功しました!!プログラマー諦めずに作業してくれてありがとう!!
これにて一応ゲームは完成です!
日数、人数の少なさ、予想外のバグに見舞われつつもなんとかちゃんと遊べる状態までもっていけました。荒はたくさんありますが今日は労っても良いかな?みんなお疲れ様!!
▲タイトル画面
▲リーダーの河野くん(17)がプレイ中
■8月28日
ゲームに影響しないレベルのバグが残っていましたが、マスター版提出後、プログラマーは修正作業に入っています。
ゲームデザイナーとアーティストは自分の作品のブラッシュアップを行うことになりました。
プロに直接指導いただけるまたとない機会です。学校では教わることができないような細かな所までたくさんアドバイスして頂きました!
こだわりや考え方、学び方を教えて頂き、ありがたい限りです!
夜には、ゲーム完成を祝してメンバーで一双というラーメン屋に行きました。
味が濃く、濃厚な泡系ラーメン(スープが泡立っているため)がっつり食べたい方にお勧めです!
やはり福岡に来たらラーメンでしょう!博多周辺にはそこら中にラーメン屋があります。
インターンシップ参加者で福岡在住が私だけなのでメンバーに何軒かラーメン屋を紹介しています。
▲一双のチャーシュー麵
■8月29日
本日はゲームに対してサイバーコネクトツー社内のレビューを頂きました。
世界観やデザインの説得力がない、ゲームの要素を活かしきれていないなどたくさんの厳しいご指摘も頂きました。
個人で反省点をまとめた後、チームメンバーでそれを共有しました。
今回、チーム内で一番問題になったのはタスク管理の甘さでした。
企画の段階から徐々に遅れはじめ、デバッグ、バグ修正の期間などをほとんどタスクに入れていなかったせいもあり、最終的に当初の予定から5日も遅れてしまいました。
本当の現場なら大大大問題です...インターンだから許された、ただそれだけで終わらせてはダメだ。
なぜこのような状況に陥ってしまったのか、どうすれば改善できるのか、チームで意見を出し合いました。チームでの情報共有をしっかり行うことが大切だと制作を通して身に染みて感じました。
この反省は必ず自らの成長へ繋がると思います!今後の制作に活かしていきます!
▲反省点をまとめるゲームデザイナーたち
そして夜にはまたラーメンを食べに行きました。値段が比較的安い!美味!それが福岡のラーメンです!
本日は名島亭に行きました。スープの濃さが丁度よく、柔らかな味のラーメン、とても美味でした!
▲名島亭での一枚
■8月30日
本日でインターンシップ最終日...チームメンバーはしんみりしてい...ない!まったく変わらない!! 少しテンション下がっちゃうかな?とか別れで泣いちゃうかな?とか考えていましたがみんな元気で相変わらずの破天荒さ!寂しさの欠片もありません!
さて、本日も作品のブラッシュアップをしつつ、データを整理し、現在私はブログを綴っています。
インターン最後の昼食ということで、肉!ご馳走して頂きました!!
少し前のお盆の期間に立ち寄ったときは休業で悔しい思いをした念願の肉です!これには伊藤さんもガッツポーズしてました笑
黒毛和牛のハンバーグとお肉を頂きました。久しぶりにおいしいお肉を食べられてチームは幸せムード。ありがとうございました!
■氏名:生井龍希
■日付:8/21~8/26
■タイトル:果たして...
こんにちは!新開君に続きまして21日~26日のブログを担当します!
プログラマー志望の生井です。
今回の制作では、全体フロー、エネミー、UIなどのプログラムを担当しました。
今回はUnrealEngine4での開発なのですが、ブループリントは使わずC++でプログラミングしており、極力UnrealEngine4の機能に頼らず組んでいます。そういった条件でゲーム開発するのは今回が初めてなので、UnrealEngien4の仕様をわかっていないことが原因のエラーが多発し、非常に頭を悩まされました。
今回のプロジェクトはGitで管理していたのですが、GDに作ってもらったタイトルなどのレベルを導入する際、プロジェクト内のコンテンツを全て入れたところ、コンテンツが膨大な容量になり、Gitサーバーの容量が足りなくなるというハプニングが発生しました。
後に調べて、移行したいレベルで使っているコンテンツのみを移行する方法があることを知り、試してみたところコンテンツの容量が10分の1以下になりました。そういった機能を知っていればこのような問題に悩まされることもなかったし、そもそもこういったコンテンツを一度にまとめて入れるのが進め方的にあまりよろしくないですね。
こういったことも考えながら進められていればこういった問題は回避できたかもしれません。勉強不足、経験不足が浮き彫りになる事件でした。
▲レベルに使われているアセットだけを移行する方法
また、エディターでゲームは遊べたのにパッケージ化すると遊べないというエラーも発生しました。これは、エディター上でしか機能しない関数を使ってしまっていることが原因でした。
そのような関数があることも知らなかったので驚きですが、指導担当者の方に教えていただけなければエラーの原因もわからなかったのではないかと思うとゾッとしますね。
こういったUnrealEngine4に対する知識不足が招くエラーは、そもそも知識がないのでエラーの原因がわかりにくいのが恐ろしいところです。
▲エラーについて相談するプログラマー
全体的に開発を振り返ると、UnrealEngine4に対する知識不足と、問題が起きにくい開発の進め方ができていなかったのが、大きな問題ですね。これらの反省点は今後の開発に役立てていきたいと思います。
時間もなく、技術的な問題の発生も多かったですが、プロジェクトメンバーの仲が良く皆で助けあうことができたので、開発を進められたのだと思います。
さて、我々のゲームは無事にパッケージ化することができたのでしょうか?
その結果は次回ATの石津君のブログでご確認下さい。
■氏名 : 新開早十
■期間 : 8/15(木) ~ 8/20(火)
■タイトル: 期日が迫ってきてピンチ!
私は、プログラマー志望の新開 早十です。
よろしくお願いします。
今回のインターンシップでは、プレイヤーやブロック、アニメーション管理クラスなどを作っています。
UnrealEngineを使ったゲーム開発は、今回が初めてですが、慣れているC++を使って、プログラミングができるので、とても開発がしやすいです。
今後の自分のゲーム開発にも使っていこうと考えています!
■8月15日
いよいよ明日がアルファ版となりました......。
デザイナーの方が作った仮マップとも結合して、そのマップでスライムとプレイヤーが戦うという、ゲームの基本の遊びに触れられるバージョンになる予定です。
状況の共有が大事になってくるので、しっかりと状況を確認して、チームで作業を進めていこうと思います!
仕様に書いた、企画段階のゲームが徐々に形になってきているので、完成させられるように作業を頑張りたいと思います。
今は、ステージ管理プログラムとプレイヤーのプログラムを作っています。
ブロックやエネミーなど、オブジェクトの多いゲームなので、処理負担がかかりすぎないように注意したいところです。
開発用に当初は、UnrealEngineの元々あるモデルなどを使っていました。
ですが、ここからは、ゲームの完成形に近い環境でコーディングしたほうが良いと感じたので、テスト用のレベルもゲームの本編に近いものに差しかえたいと思っています。
▲開発の為のテストにつかっていたシーン
■8月16日
アルファ版の発表で、プレイヤーとスライムが戦うという基本の部分を全体で見せることができました。
操作感などの、改善すべき点もアルファ版で見えてきました。
ベータ版の発表を20日(火)に実施することが決定したので、その日までに、必要な機能を実装していきたいです。
また、セクションごとの指導の時に、指導者の方に、コードの綺麗さについての指摘をいただきました。実装だけではなく、コードの綺麗さなども、ゲームプログラマーにとって、大事になってくるので、なるべく他の人が見ても、わかりやすいコードを心掛けようと思います。
▲指導者の方の指導を受けるプログラマーセクション
■8月19日
ベータ版が目前となりましたが、必要なタスクの消化が終わっていないので、タスクの量を減らすことを考えました。
ゲームデザイナーの方とすり合わせで、いくつか、ベータ版までの実装項目を省いたり、
簡略化することができたので、優先順位の高いタスクに絞ってプログラミングを行っていきたいと思います。
特に、爆弾ブロックのプログラムや、ブロックのスポナーのプログラムは、レベルデザインの作業にも関わるので、なるべく早く完成させたいです。
▲ベータ版実装途中のスクリーンショット
■8月20日
ベータ版に必要な機能の実装が間に合わず、実装ができていない必要な機能を最優先で実装したいと思います。
レベルデザインに関わる機能が完成していないので、特に優先して実装していこうと思います。
遅れている分を取り戻すために、全力でプログラミングに取り組もうと思います。
急いでいると、コードが乱雑になってしまうので、実装が間に合ったら綺麗にしていきたいです......!
ゲーム開発をしていると、夢中になって気が付けば20日になっていました。
残る時間もあと少しですが、良いものが作れるように頑張っていこうと思います!
第三回ライターの新開からは以上です。
次回の第四回は、同じく、プログラマーの生井さんです。
■氏名:上岡 ギデェオン
■職種:プログラマー
■期間:8/6(月)~8/31(金)
こんにちは、上岡ギデェオンです。
良くラスボスみたいな名前だと言われます。
ん、「全然上岡って顔じゃない」ですって?
余計なお世話です
血こそは半分ウガンダですが、生まれ育ちは福岡県の福岡県民です。
だから、キャプテン翼の何故か日本語がペラペラな外国人みたいな
感じのキャラをしています(日本人ですが)。
さて、自己紹介はともかく、25回目のFUKUOKAゲームインターンシップで、
サイバーコネクトツー様でのインターンシップの経験について話していきます。
最後までよろしくお願い致します!
私は今回が初めてのインターンシップだったため、
始まった当初は構えてました。
「担当者が怖い人だったらどうしよう?」
「開発環境はどんなんだろう?」
面接に合格してから、本当に色々な心配が頭に込みあがって不安でした。
ですけど、インターン参加後の結論から書きますと...、
めっちゃいい人しかいませんでした。
指導担当者も他のインターン生も良い人過ぎて、逆に自分の性格の悪さが目立ちました。
心配はまったく必要ありませんでした。
▲"いい人達"(インターン生&指導担当者)
むしろ環境が良すぎて、
逆に"何か裏があるんじゃないか"と疑うレベルでした。※裏はありませんでした
環境の良さの一例
- プロの現場で働いてる人の話がいっぱい聞ける!(たっぷり活用しました!)
- 会社の参考書や漫画が借りられる!(面白いものがたくさんあった!)
- 会社近くのアパートが激安!(私は実家から通いました)
- パソコンのスペックが半端なく良い!(プロ仕様)
本当に無駄な心配でした。サイバーコネクトツーの皆さまありがとうございました!
毎日のスケジュールの大まかな流れとしましては...、
←チームとのミーティング ・ その日の作業確認
←各自の作業を行う
←弁当を買って部屋で談笑しながら食べる
←指導者への作業報告 ・ 意見と指導を頂きます
←指導を元に改善点を洗い出して、再び作業します
と言う具合のスケジュールが続きました。
私は初めての社会経験だったので、このスケジュールのおかげで
社会人の勤務時間の感覚が学べましたし、また、初めてのグループ開発を経験し、
コミュニケーションの大事さを色んな場所で実感できました。
また、スケジュールの例外として、昼休みや業務時間後に
特別なイベントが時折ありました。これは、映画の上映会、
プロ開発者とのランチ、ボードゲーム会などがあり、たくさんの
良い経験と思い出ができました!
※イベントはインターン毎に違うようです
少し、プログラミングの専門的な話をさせて頂きます。
まずは、今回の開発における、プログラム関係の失敗を紹介します。
私はこの失敗からたくさん学ぶことにできたので、これを読んでいる
プログラマーの方がいれば、この悪例から何かを学んでもらえれば幸いです。
▲ニャウピアのα版以前のプレイ画面
主な問題点としては:
- 1. 事前準備不足
- 2. バージョン管理ツールの問題
- 3. 効率化のために行えたこと
で、いずれも事前の準備次第であっさり解決できる問題でした。
それでは順番に紹介して行きます。
1. 事前準備不足は、事前に命令規則やクラス設計を決めなかったため、
コードが増えるにつれて、どのソースが何を担当してるかが複雑化する問題です。
一番分かりやすい例としては、ソースファイル名が分かりずらかったり、
ソースファイル名からソースの内容が分からないことです。
「KushiAtarihantei」とソースを名付けたり ←※自分です
改善策は、開発開始前に、プログラマーできっちりルール決めに時間を
割り当てることです。そうすること、後々の作業効率が上がります。
2. バージョン管理ツールの問題に関しては、同じプログラマーの
叶江(ヨウコウ)さんのブログで詳細に紹介されてますので、是非一読ください。
競合(Conflict)を防ぐためには、頻繁のコミット(Commit)と、頻繁な
コミュニケーションが大事になります。開発の後半には、コミット時に
「コミットしました」と言う報告を欠かさずし、それにより競合の回数が格段に減ったと思います。
3.効率化のために行えたことも結構ありまして、一つは、
ゲームエンジンUnityの強みであるアセットとパッケージなど、
無料で提供されているものを使うことで作業量を格段と減らせます。
解決策は機能の追加検討時に、既に用意されているものと重複を
していないか、事前に確認することです。
一例として、プログラマのヨウさんがトゥーンシェーダー自作に一週間かけたのに、
既にUnityが無料のトゥーンシェーダーを配布してたので、
結局そっちを使った事です。ちなみに、自作を進めたのは自分です本当にごめんなさい。
▲ニャウピアのプロトタイプの開発画面
他にも、社員のプログラマーである杉川さんが教えてくれた、event処理の
拡張ライブラリのUniRXや、拡張メソッドの使用など、効率化のために、
配布されているものはいっぱいあるので、利用できるものは利用すべきです!
改めまして、本当に貴重な経験ができたと思っています。
実際のプロによる評価を毎日頂けるので、今の自分の実力や、プロになるために
何が不足しているかを見直すことができました。
もしあなたが、本気でゲームクリエイターを目指しているのであれば、
これとない機会なので、絶対にFUKUOKAゲームインターンシップに応募するべきです!
ここまで読んで頂いてありがとうございます!
また、ゲーム業界で会いましょう!
■氏名:叶 江(ヨウ コウ)
■職種:プログラマー
■期間:8/6(月)~8/31(金)
■はじめに
みなさん、こんにちは!
北海道大学・大学院情報科学研究科・博士二年の叶江です。
中国人の留学生です。
今回はサイバーコネクトツーさんにて8/6(月)~8/31(金)の間、
インターンシップ生としてゲーム開発を勉強させていただきました。
職種はプログラマーでした。
中国では、サイバーコネクトツーさんのゲームがかなり有名なので、
インターンシップに参加できてとても嬉しかったです。
このブログでは、プログラマーの視点から、今回のインターンシップで学んだことを、できるだけみなさんにお伝えします。よろしくお願いします!
▲チムチム(左)と叶江(右)
■8/6(月)~8/10(金) ゲーム企画
一日目の朝はチームメンバーの顔合わせと会社の朝礼でした。
プログラマーの岩崎さんは学校の事情でまだ来ていなかったので、
4人で簡単な自己紹介と挨拶をしました。
▲岩崎さんと合流し撮った集合写真です。
左から岩崎さん(PG)、上岡さん(PG)、
尾方さん(アーティストAT)、叶江(PG)、塩路さん(ゲームデザイナーGD)
その後、早速ゲームの企画案について話し合っていました。
インターンシップの前に、
『コントラスト、飛び越える、貫く』三つのキーワードをもらい、
それぞれ企画を考えました。
話し合った結果、『貫く』を軸にするパズルアクションゲームに決定しました!
最初の一週間は主に企画案の検討でした。
激しい議論は何回もあって、ボツ案もいくつかありました。
しかし、ゲームの世界観やキャラクターデザイン、
キャラクターモーション、ギミックの種類など、
少しずつ定着していきました。
▲ボツ案のひとつ
今回の開発環境はUnity 2018.2でした。
インターンシップ中、毎日の16時から、メンターの方々に進捗報告をして、
個別指導をいただくことになっていました。
メンターの方々からは、改善すべき点や注意すべき点、
よくできた点、足りなかった点について、詳しく教えていただきました。
▲進捗報告と個別指導の様子