いのいち勉強日記

Turingで自動運転の開発をしています。京大でPhDをとりました。Kaggle Grandmasterです。

【Unity】シューティングゲームを作ってみよう!《Day 1》GameObjectをコードで動かす!

初のオリジナルゲーム作成に挑戦です!

今回挑戦するのは、シューティングゲームです!

作成記録1日目をまとめていきます!

 

 

最終目標的に作りたいゲームの雰囲気

 

まずはじめに完成形をIllustratorでつくってみました!

 

f:id:sys-bio:20180325234350p:plain

どういうゲームかと言いますと、

「赤、青、緑の三種類の敵弾が上から落ちてきます。

 それを大砲で狙撃していくゲームです。

 しかし、敵は同じ色の弾でしか倒せません。

 下のツールバーの三色の弾は押した色の弾が出てきます。

 また、弾が茶色のところに当たるとライフが減り、3回当たるとゲームオーバー。

 もしくは、大砲に直接当たると即ゲームオーバーです。

 敵を同じ色の弾で倒すか、敵と同じように上から落ちてくる

 コインを大砲で取るとスコアが上がって行きます。」

といったゲームを目標にしています!!!

 

このゲームを作るポイントの予想は、

「同じ色の弾でしか敵を倒せない」ってところかなと思ってます。

Colliderとかをうまく使いこなせたらできると信じてます!

 

ゲーム作り1日目

 

オブジェクトの配置

 

まずはUnityを立ち上げてプロジェクトを2D作成し開発画面へ!

とりあえず、ネットでできるようにするために

プラットフォームはWebGLにしました。

そして、オブジェクトを配置!

敵球と攻撃用球、大砲、背景、茶色のツールバー、GameManagerです!

最終目標は三色の敵球と弾を作りますが、

混乱しないようにまずは一色だけ作ることにしました。

f:id:sys-bio:20180326000049p:plain

中央下の黒い筒が大砲なのですが、

その後ろに赤色の弾が隠れています!

配置の重ね順ですが、基本は「Order in Layer」でいいと思うのですが、

Canvasとかを作ってややこしくなってしまったので、

#Sceneの2Dボタンを押して横から確認しました。

f:id:sys-bio:20180326002019p:plain

絶対もっとちゃんとしたやり方があると思うのですが、

とりあえず目的の重ね順にはなりました!

 

Scriptを作成

 

次に必要なスクリプトファイルを作成して

それぞれのオブジェクトに関連づけました。

今回は3つのスクリプトファイルを作成しました。

  • 「GameManager」
    ゲーム全体をコントロールします。
    GameMangerに関連づけました!
    点数の加算や弾や敵の生成はこれでコントロールします。

  • 「BulletManager」
    弾が生成されたら上に飛んでいくようにします。
    敵との接触判定とかも入ると思います!
    (まだそこまで判断する実力がないです・・・)

  • 「EnemyManager」
    敵球が生成されたら下に動くようにします!
    こちらも球との接触判定が入ると思われます…!

 

Rigidbody2DとCollider

 

次に球と敵球にRigidbody2DとCircleColliderのコンポーネントをつけました。

このままだと両方重力に従って落ちていってしまいますので、

「Body Type」は「Kinematic」にしました。

これで重力で勝手に落ちていきません!

 

弾と敵を動かすコード

最後に球と敵を動かすためにそれぞれのスクリプトに

コードを書いていきました。

内容はほとんど同じで

Start関数でRigidbody2Dのコンポーネントを取得して

FixedUpdate関数でRigidbody2Dの「velocity」を使って

それぞれの方向に動くようにしました!

これで弾と敵球がそれぞれ動いてくれました!

 

 

まとめ

とりあえず弾と敵球が動かせるようになったので

次回はPrefab化して

「弾はボタンを押したら」

「敵球はどんどん上からでてくる」

というのを実装してみようと思います!

 

最後まで読んでくださった方ありがとうございました。

もっといい実装方法があればぜひ教えてください!