ゲーム制作やりたくてUnityの勉強してきたこれまでの記録
こんばんは、kycです。
今回は珍しくしっかりとしたあからさまに人の目を引きたいという思惑が透けて見えるタイトル通りの内容の記事です。
後述しますが、色々とタイミングが良いのでこの辺で自分のゲーム制作に関するアレコレを一旦まとめておこうかと思ったので面倒になる前に書き留めておきます。
ゲーム制作をやるキッカケとモチベーション
キッカケ、となると。自分でも書こうとした癖に一旦手が止まってしまうほどには所在の掴めないものだなと気付かされます。
5年前に大学出てフリーターになって、暇だから二次創作のイカれた小説を書き始めて、そこで初めて所謂創作活動というものに手を出した訳なんですけども
結局それも前からやってみたかったと思っててやり始めたことで、モノ作り自体は多分昔から好きだったんですよね(それが今のプログラマーとしてのキャリアに繋がっていることも間違いない)
そしてさらに遡れば、その原点は恐らく小中学生の頃の様々なゲーム体験にあると思っていて、昔は明確に「ゲームをつくる人」に憧れていたのは間違いないのです(ただ当時はプランナーなのかプログラマーなのかみたいな職種を考える辺りまでは頭が回らなかった)
だからまあ、どこにキッカケがあるのか、と考えるとそれはもうかなり漠然とした話になってしまって
去年まで書いてた小説のことも含め、創作活動に前向きになれてきた辺りで、そろそろその気持ちの原点に戻ってみるか、みたいな。昔の夢を取り戻すか、みたいな。
そして出発点がそういう部分にあるとして、そこから腰を上げられたのは端的に言えば状況が良くなった、という感じでしょうか。
昔は自分にそんな能力はないと諦めていて(別に身につける努力もしていなかったが)妄想の域に留まっていたけど、プログラマーとして生計を立てられるようになって、仕事も安定して趣味に使う時間も確保出来るようになって。それプラス小説を書いてきたこと、完結まで持っていった経験が後押しになって、もしかして俺今ならゲーム作れるんじゃね? みたいな。なんか大袈裟ではあるんですけど、そういう感覚です。
まあ他にもゲームや創作に関する考えを垂れ流そうと思えばいくらでも出てくるんですが(仮に出来たとしてそんなものを記事にしてはいけない)
手を動かさず何も生み出さないまま語り続けることほどクソダサい行為もないのでこの辺りで切り上げましょう。
ここまでで既に大分恥ずかしい文章を書き連ねていることには目を瞑って下さい
そんなことより何をやってきたかを書け
前置きが随分と長く恥ずかしくなったんですが、いい加減本記事の主題であるUntiyの学習遍歴についてまとめましょう。
Unityを本格的に触り出したのは割と最近、といっても4ヶ月前くらいからなんですが
実は本当に初めてUnityを触ったのはさらにその1年前で去年の6月頃だったりします。
当時は知ってる方なら知ってると思うんですが、小説の執筆に対してバチクソにスランプ気味で停滞していてめちゃくちゃ憂鬱になっていたんですよ
だからといってはなんなんですが、その頃から既にあったゲーム制作への憧れをそっくりそのまま執筆活動からの逃避として使う為によっしゃUnityやるぞー!wと手を出した次第です。
そして、ここで無事に一度挫折します。原因は大体分かるんですが後ほど説明しましょう。
まあ正確には挫折というよりかは、「あ、これこのノリでやってても一生何も作れねえ」となって、それならまだ終わりが見えてきている小説の方を頑張ろう! と思ったわけです。
いわば「逃避からの逃避」で元に戻ったのです。何言ってんだよって感じですが、結果的にこれで小説を一気に完結まで持っていけたので良いのです。
話は今年2022年に戻り、僕は
- 5年間書いてた小説が遂に終わったから疲れた
- 転職したので新しい仕事を覚えなきゃいけない(今年の1月から今の会社)
- マダミスの制作途中だった(買ってね! → https://booth.pm/ja/items/3882742 )
- 単純に今までの分取り戻すために遊びたい
と色々あってゲーム制作どころではなかったので、「今年中にはゲーム制作始めたいな」とボンヤリ思いつつ、たっぷり半年間自由に暮らしました。
その後、7月くらいに3月に買ったまま放置していた1冊のUnity本を取り敢えず読み始めて、そこからちゃんと本格的にUnityを勉強し始めました。
去年は執筆活動があったという事情もあったものの、「本業プログラマーとしての驕り」みたいなものが挫折に繋がったと思っていて
まあどういうことかというと、俺プログラマーだし公式ドキュメント読めば普通に触れるようになるっしょ! みたいな感覚です。案の定何も分かりませんでした(完)。
なので今回は取り敢えず、「Unityっていうかそもそもゲームプログラミング自体が全く分からないんだからそのつもりで行こう」ということで、プログラミング自体を始めた頃の気持ちに戻って、取り敢えず良さげな入門書を買って読み込むという愚直な方法で扉を叩きました。
結果、やはりこれで正解だったなあという感覚です。
去年は公式ドキュメントや経験者をターゲットとしたネット上の情報やチュートリアルを中途半端に読み解こうとしていたので何も理解出来なかったんですが
エディタの使い方とかUnityの仕組みとか、そういう基礎的な所から大分噛み砕いてかつ体系的に教えてくれる教材で一旦しっかりとベースを整えると、それ以降の情報が大分素直に入ってくるようになったんですよね。
あとはまあ、まだ「作りたいものが明確じゃなかった」というのもその選択に噛み合ってました。
去年の所では逆に作りたいゲームが決まってて、こいつの構想がちょっとデカすぎたせいで諦めてしまったみたいな節もあるんですよね
だから4ヶ月前によっしゃやるぞって本を読み始めたのは、今のままだと所謂「何が分からないが分からない」状態だから、こういうの作りたいとか考えずに大人しく本読むぞ! って思えたからっていうのがあります。
そこから2冊程本を読んで、Unityの基礎とかモノ作りのイメージが湧いてきたところで
「作りたいゲーム」の構想を分解して、まずこれくらいのプロトタイプから作っていこうみたいな整理をすることが出来るようになりました。
Webの勉強では正直、これで仕事が出来れば良いやって感覚で、こういうものを作りたいなーって思うことあんまなかったんですが
ゲームだとそういうアイデアが沢山湧いてくるので、それを「こうすれば実装できそう」って考えが噛み合ってくるととても楽しくなります。
そんでまあいつでもプロジェクトに着手できそうなとこまでは来たんですが
オンラインゲーム作成の為に買っていた動画のチュートリアル講座がまだ途中だったので、それをちゃんと終わらせてからにしよう! と思ってワーッと終わらせたのが一昨日くらいの話。
そして今はいよいよ、チュートリアルじゃない自分のプロジェクトを立ち上げて試行錯誤を始めたって所です。
要するにまだスタートラインに立ったばかりです、でもだから今この記事を書いてるわけです。
結局のところ本を読んでただけなのでそのレビューをする
蓋を開けてみれば「学習遍歴」でもなんでもなく教材のレビューだった……というのがこの記事の正体だったというわけです。まあ、どちらかというと自分の中でここまでの勉強をまとめたいというのが本当のテーマではあるんだけども。
1冊目
多分前ブログでも一回紹介したやつ。取り敢えずガチガチのプログラミング初心者向きなのは避けて、でもUnityは初心者なんですっていう人(つまり自分)に合いそうなものを探して辿り着いた。
実際、内容的にはUnityについてもプログラミングについても初心者向けっぽい感じではあったけど、良くも悪くもとにかく「広く浅く」な印象だった。
- シーンとカメラ
- ゲームオブジェクトとコンポーネント
- Prefab
- フレームシステムや入力感知
みたいなUnityの超基礎的な仕組みが分かりやすく知れたり
- アセットストアを活用して3Dモデルなどの素材を調達する
- Terrainツールを使って大きな地形を作る
- Cinemachineツールを使って追従カメラを作る
のように、ちゃんと実践的な「効率化」を行っている(完全に組み込みのプリミティブな機能だけを紹介するのではなく、使えるものは使おうぜというスタンス)は普通に参考になるし良かった。
特にアセットストアに関しては、元々3Dモデルなどが売っている場所というイメージだったが、RubyでいうgemやJavaScriptでいうnpmパッケージみたいな感じでスクリプトを効率化するC#のライブラリだったりといったものもあるんだということを知れて、ゲーム開発に対する解像度が上がったのが大きい。
もともと「漫画描きたいけど絵が描けないから小説書くぜ」みたいな男なので、Unityにおける「手に入るものでどうにかする」というやり方を紹介してくれるのは嬉しかったし単純にワクワクした。
一方C#によるスクリプティング、所謂プログラミングの領域に関しては「初心者向け」であることが裏目に出ていた感が否めない。
なんというかプログラミングについての説明を半分諦めてる(広く浅くなので)ため、「取り敢えずこれを書けば動くぜ」みたいな感じでコードが紹介されてて、こっちとしては都度適切に注釈が欲しいところをまずは全部写経しないと始まらない感じがなんとなく釈然としなかった。
まあこれは経験者というか、既にプログラミングで仕事をしている人間だからこそ感じてしまう部分でもあったとは思う。
おい何言ってんのかわかんねーぞ、って文句よりは、分かるけどその説明で初心者に伝わるの……? っていう、入門書に対する心配みたいなのが勝つ不安さ。
恐らくこれはあらゆる入門書の著者が感じている課題ではあるんだろうなと共感した上で、1冊目に選んで割と正解だったかなと思える本でした。
さっきAmazonで見たらなんと偶然にも今月末に最新版が発売されるらしい。入門書探している人は、プログラミングを別でちゃんと学ぼうとしている人ならオススメ出来ます。
2冊目
1冊目を読んでる途中でAmazonで見つけた本
表紙にでっかく書いてあるようにUnityというよりはC#に重きを置いた本
1冊目、というよりUnityの入門書が「プログラミングも含めた」入門書になっている印象を受けたので、どっちかいうとUnityのC#プログラミングについて深く学べそうなこちらを試してみた。
結論、この本は思ってたのと違った。とはいえ期待外れという意味じゃないです。
まず俺の認識が間違っていて、1冊目のような所謂Unity入門書は「プログラミングに関しても初心者」である読者をターゲットとしてそうな割にプログラミングについてはそこまで教えてくれないのである。
これは多分、WebアプリのチュートリアルがJavaScriptについてはそこまで教えてくれないのと同じで(?)、Unityにおけるプログラミング即ちスクリプティングはあくまで機能の一部で、なくてもゲームは作れるものだというスタンスだからというのが理由なんだろうなと。
それに比べるとこの本は「UnityイコールC#の統合開発環境である」くらいのノリなので、逆にC#の入門書としてタイトル通りに機能している印象を受けた。
ただそうなってくると、そもそもUnityを選んだキッカケが仕事で2年ほどC#を書いていて、独習C#も読んだことがあるから……という自分にとっては若干物足りない内容になってしまった。
もちろんブランクがあったので無駄になったという程ではないけど、独習C#の復習に近いなと思うレベルだった。
C#の内容が多くを占めている代わりに、実際にUnityでゲームを作る部分は内容が少なく(というかこの本自体が割とボリュームが少ない)、実際に完成するゲームも1冊目のそれに比べればかなり簡素なものだった。
が、僕にとってはこれが割と有り難くて、というのも1冊目のサンプルは「Unityにはこんな機能があるよ」を色々示す為に無駄にスケールのデカいゲームになっていたんですよね。わかりやすい例でいうと、Terrainで広大なマップを作るはいいけど、実際はそこまでする必要がないくらい行動範囲が小さいとか。
なのでそれを経験した後に、この本のサンプルのような殆ど「ルール作り」に収まる程度のゲーム作りをやるのは良いギャップを感じられた。プリミティブオブジェクトの活用法とか、スクリプトによるGUI制御など。
僕はプログラミング経験者だったからアレだったけど、プログラミングも未経験の人はこの本を読んだ後に↑の1冊目を読むともしかしたら丁度良いかも。
3冊目
冊 と書いてますが本ではなく悪名高いUdemyの動画講座です。
作ろうと思ってるゲームがオンラインの対戦ゲームだったので、Unityにおけるオンラインゲームを作る為のライブラリって何があるんだろう? デファクト的な存在はあるんか? と探した結果辿り着きました。
ここまでで2冊本を読んで、規模こそ小さいものの2つゲームを作っていたからある程度余裕が生まれていたので
既に理解したと思っているエディタの使い方などでも、講座を見つつ「こういう操作ってもっと楽に出来ないかな?」みたいなのを合間合間で調べてTIPSを溜めていったのが良い経験値になったなと。
それから動画でこういう講座を受けたのが久しぶりだったんだけど、やっぱり他人が操作している画面を直で見ることで気付くこともあるのでそういうのも貴重だった
ただ内容的には、求めていたPhotonライブラリの使い方だったりマルチプレイヤーのオンライン対戦を実現する仕組みについて理解出来たという点ではとても良かった一方で
「ある程度の経験者」を想定している割に、1冊目の入門書と同じような観点のマイナスポイントが見受けられたのが残念だった。
とにかくスクリプトの書き方が雑で
- ファイル分割せずにひたすら一つのスクリプトを太らせていく
- フィールド及びメソッドの可視性設定が全部適当(public, privateの使い分けもほぼない)
- あらゆる命名に一貫性がない(これが一番気になった)
- 非効率なループなどが目立つ
- シンプルに英語のスペルミスが目立つ
などなど。「このスクリプトを書けばOK」なスタンスの講座ならまだしも、ある程度のプログラミング経験者を対象としている講座でこれはまあいかがなものかなと。
ただ開発の手法というか、プロトタイプ用のシーンを作って仕組み作りを行った上で、実際に使用するマップをインポートして別シーンを起こし、プロトタイプで作ったPrefabやスクリプトを配置していく……みたいな流れは実践的で良いなと思ったし、実際に今自分のプロジェクトはそういう風に進め始めてるので参考になりました。
2冊目のゲームよりボリュームは大きい一方で、1冊目と全く違うジャンルのゲームを作るので単純に経験値が増えた感があったし、元々Photonを勉強したくて買ったのでそこそこ付加価値があると思えた。
むしろPhotonに関しては、この講座で使っている、恐らく長らくデファクトとされてきたであろうPUN2というアセットが最近レガシー扱いされ始めているということを講座の途中で知ってしまい……
- Photon Fusionという後発のサービスが出た
- Unity公式のソリューションとしてNetcode for GameObjectなるものが出た
- 他にもMirrorというライブラリ? もある
- Photonの無料プランでリアルタイム性のある対戦ゲームを作るのは割と厳しい
- もしかして俺が作ろうとしてるゲーム、Unityだと厳しい?
- Unity関係なく、専用サーバーとかを作ろうとするとめちゃくちゃコストかかって個人だと厳しい?
- そういうのを肩代わりしてくれるサービスがあったりなかったり??
みたいな感じで頭が物理的に爆発しそうなくらい色んなこと考えて深夜に思考停止したりしてました。今となっては良い思い出です(約1週間前)
なのでこの講座を通じてPhotonもといクラウドサービスによるオンライン対戦の実現、もとい
- マスターサーバー、ルームといった概念
- ネットワークオブジェクト
- RPCプロトコル
といったものについて理解出来たのは収穫だった一方
オンライン対戦要素は一旦諦めた方が良いかも……
という方向転換を早めに決めることになったのは残念でもあり始める前に気付けてよかた要素でもありました。まあ小規模なものだったら作れると思うので、1人用のゲームを完成した後にオンライン対戦を追加したプロトタイプを作って身内とテストする、みたいなのは全然アリかなーとも思ったので悪いことは何もありません。
あ、そういえば当然ながらこの講座はセールの時に目に付いて買ったものです。
賢い人はUdemyの講座を定額で買ってはいけません。約束です。
そして、これから
そんな訳で↑でも書いた通り、こうした学びを経て、作りたいものも決まったので自分のプロジェクトを動かし始めました。
またUnityの某活発な開発者コミュニティも参加させてもらい、モチベを内外から高める準備も出来て色々と燃えてます。
どんなゲームを作っているのか、という肝心の話はまた進捗報告みたいな感じでブログに載せたいと思います。
まあまた挫折しないように「今度ブログにまた書くよ」というのは自分への戒めのようなものでもあるので、乞うご期待ください。
理想では今年中にプロトタイプを公開したいんですが、そこまで順調にいけるかも分からないので取り敢えず何かしらの進捗公開出来ることくらいは目標にしたいと思ってます。
そんなわけで頑張ります。自分が楽しいことを頑張ります。
では。
kyc