こんにちはカイリトです。
前回の記事で、
最後に実際にゲームを作ると書いたので、
ゲームを作ってみました。
今回の記事ではゲームをどんな流れで作ったかを書いていきます。
失敗したことや楽しかったこと、
次の行動なんかは違う記事にしていく予定です。
どんなゲームにするのか:ゲームの設計
最初に作ろうとしていたのは、
タイトルにある宝探しではなく、
鬼ごっこのゲームを作りたいと思っていた。
鬼ごっこでは鬼はunityのナビゲーションシステムを使って、
逃げる場所は下の画像のように、
立方体の六面全部を使うゲームを考えていた。
だけどステージができてから、
試しにナビゲーションシステムを使ってみると、
壁を走らないことが判明した。
そして鬼を新しく用意するのか、
ステージを作り直すのか、
またはゲームの種類を変えるのかを決めないといけなくなった。
その結果作ったステージがもったいないと思い、
ゲームを変えることに決めた。
作るゲームは、
ステージにある宝を制限時間内に多くのポイントを集めるというゲーム。
宝は以下の6つ
ポイント数は出てくる確率によって変動させました。
プレイヤーはunityちゃんを使いました。
unityでゲームを作り始めた
これからは実際にunityでゲーム作った流れを書いていきます。
まずunityで新しいプロジェクトを新規作成して、
使うアセットをインポートした。
使ったアセットは
- “Unity-Chan!” Model
- ProBuilder
- ProGrids
- Simple Gems Ultimate Animated Customizable Pack
- Books
- 18 High Resolution Wall Textures
の6つです。
これからの作成手順は
- 画面上のオブジェクトをすべて書き出す
- オブジェクト を動かすためのコントローラスクリプトを決める
- オブジェクトを自動生成するためのジェネレータスクリプトを決める
- UIを更新する監督スクリプトを用意する
の順番で作りました。
オブジェクトの配置
使うオブジェクトを配置する前に、
ステージの作成を先にやった。
ProBuilderでCubeを用意して
その中に凹凸をつけてステージを作りました。
最終的に六面全部は使わなかった。
だけどどんなふうにしようかなと悩んだり、
コツコツ自分の手で少しずつ完成に近づいていったことは楽しかったです。
その後ステージの中に、
unityちゃんと宝の6種類を配置した。
2の移動スクリプトはunityちゃんには元からついていたので、
次の3に飛ばしていきます。
宝を作る工場(スクリプト)を書く
ジェネレータスクリプトで宝を大量に作る前に、
プレイヤーと宝との当たり判定を実装しました。
プレイヤーのunityちゃんにはColliderコンポーネントと、
Rigidbodyコンポーネントが元からついていたので、
宝の方にColliderコンポーネントをつけました。
宝とプレイヤーはぶつかると宝を消す予定なので、
宝の方のColliderのis Triggerにチェックを入れました。
さらに宝の種類がわかるようにTagを使い、
jewelry1~6のTagをつけました。
そしてunityちゃんに元からついてあった、
移動するためのControllerスクリプトに、
当たり判定ができるようにOnTriggerEnterを書きました。
そこでは後で書き足すために、
宝の種類別に処理を6つに分けて書きました。
その後やっとジェネレータスクリプトを書いて、
宝を生成する工場を作りました。
ジェネレータースクリプトは勉強した本とほとんど同じに作り、
違いは宝の種類が増えたぐらいしかなかった。
このジェネレータースクリプトを書く時に宝の生成確率を書きました。
上の画像を見ると分かるように確率が29%と1%がちょっと気になった。
この確率はRandom.Rangeで1〜100で確率を分けたけど、
1〜1000で確率を作ればよかった思う。
ジェネレータースクリプトが書けたら空のオブジェクトを用意して、
オブジェクトにスクリプトをアタッチすることで工場が完成した。
完成した工場を実際に動かしてみるといくつか問題が発生した。
1つ目の問題は宝がステージに重なり合ってしまうこと、
その問題は生成する数を増やして、
生成された宝を当たり判定が反応したら移動するスクリプトを書いて対処した。
他にも宝を多く生成させようとしたら、
生成させる数よりも少ない数しか出てこなかったりした。
この問題は多くの宝を生成しないゲームにすることを解決策にした。
制限時間とポイントを追加する
ポイントや時間制限のUIは勉強した本で1回書いたので、
変数を変えたり増やしたりで簡単にスクリプトが完成した。
この時にコントローラースクリプトも一緒にポイントの処理を書いた。
やっぱり1度作ったモノや、
作り方がわかっているものは作り時間が少なくて済む。
実際にこのゲームを作る中で1番時間がかかっているものはステージだった。
だけど最終的にはステージ全てを使えなかったので、
ステージもアセットを使えばよかったと思った。
最終的に上の画像のようなゲームが完成した。
まとめ:上手くいかなくて残念だった
今回の記事は自分が考えたゲームをどんなふうに作っていったかを書きました。
その結果は最初に考えたゲームから離れ、
実装したい機能も失敗して散々な1作品目になった。
だけどステージ作りに熱中している時、
実際にゲームが動いた時は本当に楽しかったりしたので、
ゲームを作ってみて良かったと思う。
ゲームを作った時に感じたことは、
この記事に書きました。