先月からプログラミングを始めた初心者が、さっそくUnityでゲームらしきものを作ってみた。
プログラミング歴
プログラミングはほぼ未経験である。
といっても完全未経験というわけではなく、5年ぐらい前のニート時代にRubyという言語を少しやって1日でやめたことがある。
環境構築とか”Hello World”とか四則演算のあたりで面倒になってやめたので、まあ未経験と変わりないレベルである。
で、先月からまた挑戦してみようと思って始めたところ。
Unityに出会うまで
最初はUnityでゲームを作ろうとかは全く考えておらず、30歳近い年になって何のスキルもない自分を憂いて、何となくプログラミングをやってみることに。
とりあえず人気のPythonという言語から始めた。
まずはProgateという学習サイトで、10日ほどかけてPython講座を2周終わらせた。
その後は何をすればいいのか分からなくなったので、とりあえずモチベーションが保ちやすそうなゲーム作りをやってみることに。
そこでUnityというゲーム制作ソフトを知るのだが、C#しか使えないということなので一旦スルーした。
そしてPythonでゲームが作れるPygameというライブラリを使うことにしたのだが、あまりにも難しくて挫折。
ただ画像を表示するだけでも、よく分からないコードを書かないとダメだし…
とりあえず画像を回転させたり線を引いたりして遊んでたけど、一向にゲームを作れる気がしなかった。
ググっても出てきた記事のコードが全然理解できないし。
もっとお手軽な方法ないのかと色々調べてみたところ、
「Unityが使いやすい」「Unity凄い」
みたいなべた褒め記事がいっぱい出てきたので、観念してunityとC#を始めることにした。
さようならPython。
UnityとC#
Unityをやろうと決めたものの、何から始めたらいいのか分からなかったので、とりあえず体系的な知識を身に付けるためにUnityの教科書という簡単な入門書を買ってみた。
UnityだけでなくC#についても解説されてるので、プログラミング素人でも取っつきやすい良本だった。
特に僕の場合、事前にPythonでプログラミングの基礎を終えてたので、C#もササッと学習できた。
言語が変わっても多少書き方が変わるだけで、基本的な仕組みは変わらないようで安心した。
それで本に従ってUnityを色々と触ってみたところ、まあ評判通り使いやすいソフトだった。
Pygameみたいに全部コードで表現する必要はなく、画像やファイルをドラッグ&ドロップするだけで視覚的に作れる部分が多いので、プログラミング素人にはかなり嬉しい。
あとUnityは利用者も多いので、分からないことをググったら情報がたくさん出てくるのも良い。(難しくてよく分からない情報も多かったけど)
さっそくUnityで何か作ってみた
入門書を終わらせたので、さっそくゲームらしきものを作ってみることにした。
最初は本当に1から自分で作れるのか疑問だったが、やってみると意外となんとかなった。
といっても練習で作ったものなので、とても遊べるレベルには達していないけど…
1作目:シューティングっぽい何か
プレイはこちら。(PC用なのでスマホだとプレイできないかも)
https://unityroom.com/games/t001
製作期間:2日
「W」「A」「S」「D」キーで移動
スペースキーで攻撃
「敵」と「敵の弾丸」を量産しようとしたら何故かうまくいかなかったので、弾丸だけ自動生成にして敵オブジェクトは諦めて1つ1つ設置することにした。
敵の弾の発射動作を1匹ずつ分けて書いてるので、コードが無駄に長くなってしまった。
配列とか使えばスッキリ書けるのかな?とも思ったけど、ここは調べても意味不明だったのでゴリ押しで完成させた。
まだまだUnityの使い方もプログラミングもよく分かっていない。
とりあえず1日目でゲームの大枠を完成させて、2日目で色々な調整(ボスの動きとか、アニメーションとか、自機を画面外に出れないようにしたりとか、弾の連射を抑えたりとか)をやった。
こんなショボイのでも作るのは結構苦戦した。
おそらく10時間以上は費やしただろう。
といってもほとんどエラー対応と調べものに費やした時間なので、慣れればこのぐらいなら2~3時間で作れるようになると思う。
2作目:タワーディフェンスっぽい何か
プレイはこちら。
https://unityroom.com/games/t002
製作期間:4日
タワーを設置して拠点に攻めてくる敵を撃退するゲーム。
クリックでタワーを設置。
タワーは近くの敵を自動攻撃する。
敵を倒すと5ポイントのお金が手に入る。
タワーを設置するには30ポイント必要になる。
拠点の体力が0になるとゲームオーバー
スペースキーでリスタート
という流れ。
1作目はほとんど入門書の内容を応用しただけだったが、今回はググりながら様々な機能を実装していった。
攻撃対象として複数の敵の中から「タワーに一番近い敵」を1体選びたかったのだが、これが一番苦戦したところ。
色々試してもエラーが出まくってもう諦めようかと思ったが、最終的には敵オブジェクトを配列に入れてforeachで1つ1つ取得してifを通すことで、最短距離の敵を取得することになんとか成功した。
あとは変な動きをする部分を1つ1つ潰していったら、それっぽいゲームが完成した。
まあ色々と妥協した部分もあるが、大体思った通りのものが完成したので良しとしよう。
あとは様々な機能(複数種類の敵やタワー、レベルアップ機能など)を搭載し、デザインを改善すれば、普通にプレイできるタワーディフェンスゲームになりそう。(それが難しいのだが)
てか今のままではタワーを設置しまくる以外に選択肢がないので、ゲームとして成立していないな...
なかなか地道な作業だった
やってみて分かったのは、製作時間のほとんどは「調べる時間」だということ。
分からないことだらけなのでやり方を調べる。
やってみたらエラーが出るので原因を調べる。
また分からないことが出てくる。
この繰り返し。
おそらく経験を積めばエラーの原因もすぐに特定できるようになるんだろうけど、今のところ何がダメなのか見当が付かないことが多い。(後になって何となく分かったところもあるけど)
ゲーム制作というのはなかなか地道で進展のない作業なんだなと。
今の実力ではクソゲー以下のサンプルゲームみたいなのしか作れないので、今後は公式のチュートリアルを進めてUnityの使い方をしっかり押さえていこうと思う。
あとやっぱりコードをしっかり書けた方が表現の幅が広がると思うので、C#をもう少し本格的に勉強してみるつもりだ。