Unityゲーム開発者ギルドに入って1年経ったし振り返ろう
本記事は、Unityゲーム開発者ギルド Advent Calendar 2022 6日目の記事です。
Unityゲーム開発者ギルド(以下、UGDG)については、下記リンクをご覧ください。UGDGはいいぞ!
はじめに
こんにちは、絶賛就活中のputinuです!
冬も本番の季節となり、寒い日が続いているかと思いますが、皆さんいかがお過ごしでしょうか。
さて、私はUGDGに入ってもう間もなく1年になります。
UGDGは非常に賑やかで楽しく、これまで高いモチベーションを維持してゲーム開発・勉強に打ち込むことが出来ています。
本記事では、自身での振り返りの意味も込めて、そんな1年間の活動内容について、「技術」と「作品」に分けてご紹介いたします!
そもそもなぜUGDGに入ったのか
まずお話に入る前に、私がなぜUGDGに入ろうと考えたかのきっかけについてざっくりとお話します。
私は、2020年の12月よりTwitter上にてゲーム開発の活動を開始しました。
当時開催されていたUnity1週間ゲームジャムへ参加しつつ、もっと開発技術を向上させていきたい、もっと思うようなゲームを作れる技術を持ちたいと思いながら活動しておりました。
しかし、翌年の2021年になり、次第に自身の技術力に伸び悩むようになりました。
技術的に相談できる仲間もあまりいませんでしたし、張り合える相手も少なかったため、モチベーションを維持することが難しかったです。
あくまで個人的な考えですが、Twitterは各クリエイターの開発進捗や制作物について見られることが良い反面、技術的な知見交換を行ったり、分からない点を訊ねることには不向きだと考えています。
(そもそも私が小心者で、質問したりすることに億劫であったということもありますが…。)
そう思い悩んでいる過程で、unity1weekを通してないちさんを知り、ないちさんが運営しているUGDGというコミュニティに非常に魅力を感じました。
UGDGには、各々がtimesと呼ばれる分報チャンネルを持ち、自分のゲーム開発進捗や困っていることを呟いたりする文化があります。
また、それぞれのtimesに対して色んな人が参加して議論したり、困っている人に対してアドバイスをしたり、わいわい盛り上げたりできるとても魅力的な環境がありました。
そこで私は、「これは入るしかない!」とUGDGへの参加を決意しました。
1年間の振り返り・技術編
さて、ここからはそんな意気込みで始まった2022年の活動をピックアップして振り返っていきます。まずは技術的な面から。
技術面では特に、多くのUGDGメンバーの方々から意見やアドバイスを頂きました。本当にありがとうございました!
Shader・数学の勉強(1~2月)
2021年12月に行われたUnity1週間ゲームジャム第21回『正』にて、私は『修正少年アメンダ』という2Dパズルアクションゲームを作成しました。
この前後あたりから、他のunity1weekクリエイター方の影響を受け、Shaderを用いた表現や演出に興味を持つようになりました。
特に「unity1week online共有会」からは大きく刺激を受けましたね。
(青木ととさんいつも運営ありがとうございます!)
そんなこともあり、UGDGに入って間もなくトゥーン調の水面シェーダーを作れるようになることを目標に、Shaderの勉強を始めました。
また、Shaderの勉強に際して数学を勉強する必要も出てきたため、その勉強も合わせて行うようになりました。(ここで初めて数学の価値を理解し、とても好きになりました)
またコードを書くだけではなく、以上のようにShaderGraphなどへも手を出し、現在では簡単なものであればパッと作れる程度には成長しました!
また、勉強を行っていく上で、以下の書籍・動画には特にお世話になりました。
書籍『ゲームアプリの数学』
動画ではShaderというものの仕組みの理解、書籍ではそれより踏み込んだ内容の学習や数学とゲームの繋がりの理解に役立ちました(特に後半のグラフィックスパイプラインの処理手順に関するお話は興味深かったです)。
C#を学ぶ(2~3月)
Shaderにおける当初の目標は達成できたため、次はC#機能の学習を始めました。
私はUnityについて独学で学んできたため、知識体系の歪みは激しいものでした。Unityについてはある程度慣れてきたものの、C#機能をよく理解しておらず、上手くコードを書けない事もよくあったものです。
しかし、ゲームを作り続ける中で複雑な実装を行うことが増えてきて、次第に学ぶ必要性を理解していきました。
それに今後、設計やUniRx/UniTaskなどについても学ぶ予定であったため、C#の機能について一通り学んでおきたいという気持ちがありました。
そのため、当時よく理解していなかったdelegateからイベント、LINQ、そしてRxと学習を進めていくことにしました。
基本は下記2つを軸に勉強を進めていきました。(他にもQiita記事など色々覗いたけど)
書籍に至っては約800ページの鈍器だったので、毎日通学時間にゆっくりと読み進めていきました。
最初から読み進めたためかなり時間は掛かってしまいましたが、基礎部分などでも非常に様々な発見がありました。
Unityを触っているだけでは学べないようなことも沢山あり、このあたりから徐々に実装に幅を持たせられるようになっていった気がします。
設計を知る(4月~7月)
C#の機能についてもある程度学習が済み、このあたりから設計の勉強に手を出しました。
設計を学ぶきっかけとなったのは、ゲームクリエイター甲子園2021へ提出した作品『Gload』の失敗体験からです。
この時、私は初めて中規模の開発にチャレンジし、設計のせの字も知らぬまま、愚直にプログラムを書いていました。
日を重ねるごとに増える循環参照…、200行のコードのコピペ…、Find系関数の乱用…。
う~ん、酷かった。
チーム開発でやっていたら、私の命は間違いなく無かったでしょう。
その結果は言わずもがな、拡張にかける時間的コストが大きくなりすぎ、もはや開発を継続することは不可能になりました。
とはいえ、設計を学ぶきっかけにもなりましたし、良い経験だったと今は思っています。
そうした経緯から勉強を始めましたが、この頃はまだ、どういう風に設計を学んでいけば良いかも分かりませんでした。
そのため、手探りでネット検索を行いつつ、図書館で書籍を借り、インプットを行いました。
まずは、クラス図などの統一モデリング言語(UML)を学ぶため、その入門書を読むことから始めました。
この書籍は足掛かりとして非常に良書でした。UMLを学んだだけで特に変化はありませんでしたが、Qiitaなどの技術記事に書かれたクラス図が読めるようになったため、理解できる記事が増えました!(ゲームでレベルアップした感覚でした)
続けて、以下の書籍を読み進めました。
書籍『Clean Architecture 達人に学ぶソフトウェアの構造と設計』
まずクリーンアーキテクチャ本からは、オブジェクト指向の基本的な考え方から設計原則となるSOLID原則、コンポーネント結合周りの話までを勉強しました。(このときUMLの学習が非常に役立った)
当時の私のレベルとしては内容が堅く、まだ読むには少し早い難易度に感じましたが、インターフェイスの切り方や設計の根本的な考え方など、発見も多くありました。
こうして、ある程度設計を学ぶ上での方針が立てられるようになりました。(具体的には次節にて)
設計の学びを深める(8月~現在)
この頃から、インターンシップや就活準備等で忙しくなりはじめ、学習ペースも遅くなっていきました。そのため、余裕があるときに少しずつ進めていきました。
まずは、Unityにおける便利ライブラリであるUniRxとUniTaskの勉強を始めました。これらは春あたりから利用していましたが、しっかりと正しく扱えるようになったのはこの時期でした。
UniRx/UniTaskに関してはQiita記事やYouTube動画が勉強の助けになりました。
CancellationTokenの扱い方や、Taskにおける問題点の理解、IDisposableなど各種インターフェイスについてなどなど、多くの事を勉強しました。
その他にも、SOLID原則を意識したゲーム制作やデザインパターンの学習なども並行して進めていきました。
デザインパターンについてはかなり色々な記事・書籍を参考にしましたが、ここでは以下の2つを挙げます。
なお、現在は依存性注入について学ぶため、ExtenjectやVcontainerについて勉強しています。
設計も不慣れながらも少しずつ出来るようになってきて、インターンシップやハッカソン、個人・チームでのゲーム開発へも段々とその技術を取り入れていきました。
インターンシップ等でしっかり設計が考えられていると褒めて頂いた際はとても嬉しかったですね~。
しかし、現在もまだまだ設計については悩むことも多く、課題は山積みです。
とはいえ、設計は経験によって伸びるところもあると思っているので、今後もゲーム開発では設計を強く心がけ、色々なパターンを試みることで能力を高めていく予定です!
1年間の振り返り・作品編
この1年間はどちらかといえば技術習得にポイントを割り振っていたため、そこまで沢山の作品を作ることは出来ませんでした。
こまごまとした作品はありますが、今回はその中から3作品をピックアップしてご紹介いたします。
Blockete (5月)
Unity1週間ゲームジャム第22回「そろえる」投稿作品の2人オンライン対戦ゲーム『Blockete』です。
当時マルチプレイヤーゲームを実装するならこのアセット、と名高かった"Photon Unity Networking 2 (PUN2)"を初めて試した作品となっています。
また、お題の発表された初日に、そのアセットについて勉強を始めるという破天荒な行動に出た作品でもあります。
Twitterの引用リツイートで、「本番に新技術を!?」とびっくりされていた方がいらっしゃったのが印象的でした。
まあ予想通りバグ関係に時間を取られ、作品投稿は数日間ずれこんでしまいました。(とはいえ、これだけで済んだのはo8queさんのPUN2記事のおかげ…)
遅れはしたものの、ぱふもどきさんの配信などを介して沢山の方に遊んでいただき、中には何十回もプレイして下さる方も現れるなど、非常に作って良かったなと思えた作品でした。
Grow With(8月)
こちらは大学の演習で開発した作品で、特にリリースなどはしていませんが、UIの実装面を非常にこだわった作品なので今回ピックアップしました。
ゲーム内容としては、習慣化したいタスクを設定し、そのタスクをこなすことで植物を成長させていく習慣化促進ゲームとなっています。
今回はスマートフォン向けのゲーム開発ということもあり、複数の解像度や異なる画面比率に対応したUIの実装を行う必要がありました。
そこで完成したのが以下の動画です。
このように、相当特殊な変形をさせたとしても、その構成が崩れないようなUI構成となるように配置を行いました。
これは2021年に参加したUnity1週間ゲームジャムにて、幾度とUIの実装に失敗したことで積み上げられたノウハウが活きた作品です。
過去には、人によって上手くUIが表示されない・ズレるといった症状が多発し、何度も悪い体験を与えてしまいました。しかし勉強の甲斐あり、ここまで動かせるようになり非常に嬉しかったです。
ちなみに、私はこのノウハウに関して初めてLT登壇をしました。(しかも初めてのもくもく会で)
非常に緊張しましたね~。
またもくもく会参加したいな~。
時溜のアマリ(10月)
最後に今年最も気合の入った作品、
2D横スクロールアクションゲーム『時溜のアマリ』です。
なんとストーリーあり。
この作品は、Unity1週間ゲームジャム第23回「ためる」に投稿したのち、ゲームクリエイター甲子園2022へ投稿し、ブラッシュアップさせた作品です。
今回は、デザイナーの小夜沢さん(@sayosawa__2)とチームを組み、開発を行いました。
本作は、ストーリーあり、マルチエンドあり、アクション・ボス要素ありの非常にボリュームの大きな作品となっています。
また、今回の開発では「プレイヤーをはっとさせるゲーム体験を与える」ことを目標に、ストーリーを練りに練りました。
その結果、沢山の方から好評を頂き、unity1weekのランキングもこれまでよりもずっと高い作品になりました!
ちなみに、今回私は初めてデザイナーさんとチームを組んで開発を行ったのですが、頂く素材が本当に素晴らしくて、お金を取らなくていいのか…?と疑うほどでした。(例えるなら、毎日のように神絵が投下される感覚でした。)
とてもかわいげのある主人公がフィールドを駆け回るその姿には、非常に癒されるものがありました。
個人的な成果としては、当時学んでいた設計の知識を活かすことができ、ブラッシュアップの際にもある程度のペースを維持して開発することが出来たため、ぼちぼち上手く出来たかな~と感じています。
しかし気になる実装箇所がいくつかあるため、時間が空いたら作り直していきたいですね。
全体を通して
こうやって振り返ってみると、案外色々と触っていたのだなあと感じます。
ここで振り返った内容以外にも、Blenderを用いたモデリング練習や、ペンタブによるワンドロ挑戦、Affinity DesignerによるUI作成練習など、色々なことにチャレンジしていました。
この1年間は技術的にも、精神的にも成長できた良い1年間でした。
そしてこの1年間、沢山UGDGに成長を促してもらったと感じています。
毎月月間目標を掲げたり、つらつらとtimesに書いた話のアドバイスを頂けたり、色んなクリエイターとお話したり、またそれを聞いたり…。
私はそこまでアクティブな方ではありませんが、こういったわいわいとした雰囲気は非常に好きです。
来年はもっとより積極的にUGDG内でもコミュニケーションを取りつつ、この1年間で得られた沢山の知見を他のメンバー方に還元していきたいですね~。
勉強としては、今触っているDI周りが落ち着いたら、次はエディタ拡張を触ってみる予定です。
ただ現在は就活真っただ中で中々思うように活動が出来ていない状況ではありますが、今後もより一層頑張っていけたらと思っています。
ではまた!
寒いのでしっかりお風呂に入って温まって寝ましょう!
putinuでした!