こんにちは、Unity を学びながらゲーム作りをしたことがある者です。
まず、 @yuta_san0629 さんはとても大きな挑戦をしていると思います。
@NyancoRitter さんの言うように、プログラミング初見の人が Unity でゲーム作りをする場合、同時並行で学ぶことが (@yuta_san0629 さんの想像の数倍くらいは) 大量にでてきます。
私が思いつく物をあげてみると、
- プログラミングそのものの考え方
- C# の文法 (C#を使っている場合)
- ゲーム作りそのものの考え方
- Unity で提供される各種機能の使い方
- collision 等の Unity の UI から使う機能の使い方
- Update 等のスクリプトを書く際に使う機能の使い方
何もわからない初心者のうちは、「考え方」と「お約束(文法や UI の使い方等)」の両方を学習しながらゲーム作りをすることになると思います。
しかも、ゲーム作り、プログラミング、アルゴリズム等様々なレイヤーで毎回「考え方」と「お約束」の両方が顔を出してくることになることでしょう。
どうやって皆さんは上達していくんですか?
勉強しながらゲーム作りをするというのは、大量の、しかも特徴の異なる敵を同時に相手にするという自覚を持って取り組むことが肝要になると思います。
そして、こういう時には敵を同時に相手にせず、以下のように問題を分けて丁寧に取り組んでいくことが大切になります。
- 「今、自分がやりたいことは何なのか」をできるだけ細かい単位にわける
- 「今、自分がやりたいことの一単位分」を丁寧に言語化する
- 「やりたいこと一単位分をするために必要だけど自分が知らないことは何か」を誰か (ChatGPTとか、Googleとか)に聞く
- ここでトンチンカンな解答が来たら、2の言語化が丁寧でなかったのか、1の問題の分割が甘く、まだ大きな問題に取り組もうとしているのか、どちらかだと思うので、前のステップに立ち戻って考えてみましょう。
- 提案された解決策が合ってるかどうか考えてみたり、実行して確かめてみたりする
例えばこんな感じで考えていきます
- シューティングゲームを作りたい(大きな目標)
- そのためには、自機を上下左右に動かしたい (詳細化を試みたが、まだ漠然としている)
- 自機を動かすのは PC のキーボードの WASD キーにしよう (詳細になった)
- キーボードの WASD が押されたかどうかをプログラムから知る方法を私は知らない(知らないことが明確になった)
- あと、自機をプログラムから動かすにはどうすればよいだろう(まだ漠然としている)
- 自機の座標をプログラムから変更したい(明確になった)
- それから、シューティングだから弾を撃ちたいな (漠然としている)
- スペースキーで発射するのがいいかな
- 撃った弾は上方向に毎時間座標が変わっていくよな
- ↑これらは自機を動かす時に学んだこと(キーボードの入力取得、ゲームオブジェクトの座標の操作)を応用すればできるな
- 敵も追加したいな
- 敵の移動はどうやって作ればよいだろう?
- NPC の動かし方の考え方を知りたい(でもいいし)
- とりあえずランダムに動かそう!
- どうやってランダムに動かせば良いのだろう(でもいい)
- 敵も弾を撃つよな
- 自機の弾に当たったら敵が死ぬようにしたいな
- 敵の弾に当たったら自機が死ぬようにしたいな
もちろん、実際は上のように上手くいくわけではなく、様々なタイミングで予期せぬ問題が発生します。
- 考えを言語化するための単語がわからない
- コンパイラが意味のわからないエラーを吐いた
- 英語の意味がわからないのか?
- 意味はわかるが解決策がわからないのか?
- コンパイラはエラーを吐かないけど実行結果が思ったとおりにならない
- バグの見つけ方がわからないのか?
- バグは見つかったが直し方がわからないのか?
- 直すために、理想的な状態を自分で言語化できているか?
- 言語化できているのにバグってるとしたらなぜか?
そういう時にも、「今自分が何に詰まっているのか」を分析して、1. 細かい単位に分けて、 2.明確になるように言語化して、 3.誰かに聞いて、4. 試してみるという風に先程の考え方を使います。
「困難は分割して部分部分の問題に対処する」 というわけで、分割統治法のお話でした。
この話があなたのためになることを願っています。