先日ドットインストールというプログラミング学習サイトでゲーム制作をしましたのでその時の内容を紹介したいとお思います。
私の目標はVRやARといった技術に触れたいという目標があります。
今回はVRゲームの制作にも使われているunityというプラットフォームを使って
写真のような2Dのシューティングゲームにチャレンジしてみたいと思います。
【この記事でわかること】
ドットインストールでのシューティングゲームの制作過程をざっとご紹介します。
難しい内容は書いていませんのでどんなことをするのか? 難易度は? と気になっている方、
ゲーム制作を体験してみたいと思っている方はぜひ参考にしてみてください。
目次
まずは下準備
ドットインストールではUnityのPCへのダウンロードなどもちゃんと解説してくれています。
私は事前にUnityをPCにインストールしていました。
まずは画面の設定をして、作業をしやすいようにウィンドウを配置します。
※ここからの画像は全て私のPCでの制作画面です。
解説に沿って実際に作っていきます
ドットインストールの解説は1本の動画が2〜3分と短くて、集中力がきれずに身終える事ができます。時間のある時に一気に進めたりもできるので、自分のペースで進めやすいですね。
プレイヤーの機体を準備します。
画像ではわかりませんが、プロペラが回っているアニメーションになっています。
仕組みとしては2つの微妙に違う画像を組み合わせてパラパラ漫画みたいにしているのですね。
私としてはこれだけでも感動してしまいます。
次はこの機体が動くように設定をしないといけません。
飛行機が動くようにする
そうなるとここからはコードの入力が必要です。
このコードは動きに関する設定で、Horizontalが水平、Verticalが垂直の動きと、移動の速さ(8f)が指示されています。
transform.positionでは自分が今どの位置にいるのかを教えています。
自分がこれまでに学んだ内容にはない始めてみるコードですが、
【自分が今いる位置に対してどれだけの距離・どのくらいの速さで】という事なんだなとなんとなく直感で理解できました。
画面で確認すると中央にいた飛行機がボタンを押したことで左に動きました!
さらに感動を覚えます。
※コードを書いた事がない方は始めは抵抗があるかもしれませんが、この学習ではそこまで長々とコードを書くことはありませんでしたよ。
弾の発射機能
シューティングといえば攻撃ですね。弾の発射機能をつけないといけません。
これは一体どうするのでしょう。
これには弾がまっすぐに飛んでいくという設定をしてあげないといけません。
ここでもコードを入力して、指示を出します。
while文という「繰り返し処理をしてね」という文を使うことで弾を連射するという指示を出せます。
するとこんな感じで繰り返し弾を発射してくれるようになりました。
なんだかゲームっぽくなってきましたね。
しかし今のままではただ弾が真っ直ぐ繰り返し前に飛び続けているだけなんです。
これに弾の衝突判定(何かに当たる)というものを設定することで、当たったらどうなるのかという指示を出していくんです。
私はここまでやるのに1時間ちょっとかかりました。レッスンは24あるうちの10あたりです。
敵機の登場
自分の飛行機ができたら今度は相手の飛行機も登場させます。
こちらも素材を準備してくれているので、そちらを使います。
自分の飛行機に対して上から飛んできて欲しいので、くるりと向きを変えてあげて、対峙する形にしました。
一機だけだと物足りませんね。上からどんどん敵がやってくるように設定していきます。
自分の飛行機から弾が連写される方法と同じやり方で、
【繰り返し敵の飛行機がランダムに上方向から次々とやってきてね】という指示です。
すると緑の飛行機が続々と現れるようになりました。いよいよゲームらしくなってきましたね。
ただ今のままだとこちらから発射した弾が素通りです。
敵に当たり判定をつける
この緑の範囲が衝突判定になり、当たったと判定する範囲です。
敵に動きをつける
今のままでも十分ゲームっぽいですが、敵が真っ直ぐ突っ込んでくるだけではちょっと面白くないかもしれませんね。
これに敵の動きをつけていきます。
なんとそれには三角関数が必要!! 私は数学が大嫌いです(笑)
社会人になってからこれを使うのは2度目。1度目は工場勤務の時でした。
「そんなことも解らないのか!」と怒られたのを覚えています。
とは言っても学習の動画では複雑な解説はなかったので、その通りにやってみました。
しかし書かれているコードを丸写ししてみても同じ動きをしません。
「もしかして何か仕様が変更になって反映される数値が動画と違うのか?」 と思い、色々数値を変えてみたところ動く速さの設定を0.05fではなく、0.005fにしたことで、学習動画と同じくらいの速度になりました。
ここからがゲームの大事なところ
敵が飛んできて、自分も弾を撃っていますが今の状態ではただすり抜けるだけです。
そこで、敵の設定でif文を使いました。
もしも敵の衝突判定の範囲に弾が入ってきたらー>つまり弾が当たったら、
敵と弾が消失してねという条件をつけます。
静止画ではわかりませんが、弾が当たることで敵が消えています。
今のままだと敵を倒したという感じがしません。そこで爆発の演出を追加していきます。
ただ今の状態だとゲームとして成り立っていません。
こちらは当たっても平気な状態なのは不公平ですね。
こちらも敵にぶつかったら爆発する仕様を設けていきます。
こちらもさっき的に弾がぶつかったらというところを、的に自分の飛行機が当たったらと書き換えただけです。
お互いに爆発しました。
あとはゲーム性を出していくために
スコアを導入していきます。
しかしここで思わぬ苦戦を強いられます。設定がなかなかうまくいきません。
これは困ったとになりました。
色々調べてみたり自分で違っていそうな点を探ってみたりを1時間。
基本的には自分で調べて解決策を探るのがプログラマーそう習いました。
最後に
そうこうしているうちにデータがクラッシュしたのか消えてしまいました(笑)
なんとも悲しい幕切ですが、とはいえゲーム制作の一端に触れることがでいました。
ゲームの内容としては私が生まれる前のレベルのゲーム内容です。
今では素人の私でも制作が体験できるほどに便利なUnityシステムがあります。
こう言ったものづくりもどんどん体験していきたいと思います。
次回は3Dゴルフゲームを制作したいと思います。
コメント