Unityに関連する記事です

 こちらが最後の手順になります。以下の内容で順番に実装を進めていきます。

手順22 ーステージ作成ー
39.ステージを作成する −フロアを複数して作成するー
40.通して遊んで不具合はないか確認し、新しく追加する要素を考える



 新しい学習内容は、以下の通りです。

 ・ステージ作り
 ・【この挙動は遊んでいて問題ないかな?】という視点で考えてみる
 ・新しい要素を考えて、設計ロジックを考える



39.ステージを作成する −フロアを複数して作成するー

1.ステージ作りの考え方


 ここまでの手順でゲームのベース部分は完成しました。

 振り返ってみましょう。

 ・キャラの移動・加速・停止・ジャンプの制御
 ・キャラの行動とアニメーションの同期
 ・カメラのキャラ追従制御
 ・障害物の作成と設置
 ・得点用のサークルの作成と設置
 ・ゴールの判定
 ・スコアなどのUIの設置
 ・障害物との接触判定による霜のエフェクトの追加



 一番始めの学習内容にも説明があるように、このゲームのステージは1つの長い斜面のステージではなく、短いフロアをいくつも滑っていくステージ構成になっています。
そのため、いままの手順では、フロアを構成するための部品(障害物、サークル)を作成して、それに関連するシステムを実装してきました。

 ここではフロアのゲームオブジェクトを複製し、それをつなぎ合わせて1つのステージにしていきます

 1つのフロアの長さは長くありませんので、フロアを自由に継ぎ足していくことで、自由なステージの長さにすることが出来ます。

 各フロアには特色を作りましょう。
サークルの多いフロア、サークルがないフロア、障害物が多いフロア、モグラしかいないフロアなど、考えついた面白いアイディアを上手く利用してオブジェクトを設置します。

 サークルも障害物もプレファブ化してありますので、好きな数だけ設置することが出来ます。
その際には各フォルダ役の Obstacles ゲームオブジェクトや Circles ゲームオブジェクト内に配置して、管理を行いやすいように心がけてください。
同じプレファブであっても、角度を変えたり、大きさを変えたりすることによって、バリエーションを豊富に用意することが可能になります。

 いつも同じ大きさのモグラが、たまに2倍くらいの大きさになって飛び出してきたら、ユーザーはきっと驚くはずです。



 いくつかの異なるフロアが完成したら、そのフロアをプレファブ化しましょう。

 例えば、5つの異なるフロアを作成することができたのであれば、それをプレファブ化することで、さらにフロアを増やしたい場合には
そのプレファブを元に、新しいフロアを作成することがパターン化でき、製作が容易になります。

 ゲーム内にユーザーが遊び方を考える部分駆け引きやジレンマ(障害物の後にサークルがあり近づくまで見えない、両方取るには加速と停止が必須、など)が生まれるように配置してステージを作成します。
いままでに自分が遊んできたゲームのギミックやステージのオブジェクトの配置などを参考にするとよいでしょう。


2.必要に応じて、新しい障害物用のゲームオブジェクトを作成する


 どのようなものを作成してもよいし、しなくてもよいです。
すでにインポートしてあるアセット内から作成してもよいですし、新しいモデルをインポートしてもよいです。

 単純に動きのないゲームオブジェクトであれば、コライダーをアタッチすればそれだけで障害物として機能します。
例えば、雪だるまのゲームオブジェクトであれば、コライダーと一緒に FrostEffector スクリプトもアタッチして、接触したら霜のエフェクトを発生させるようにしてもいいでしょう。

 アイディアが肝心ですので、これはどうかな? と思ったこと、考えついたことをゲームに反映してみてください。



 以下の例では石のゲームオブジェクトを障害物として1つ作成し、それをプレファブ化しておいて、3つ組み合わせて1つのトンネル状の障害物にしています。
このゲームオブジェクトは障害物ですので、Floor ゲームオブジェクト内の Obstacles ゲームオブジェクトの子オブジェクトとして設置しています。


ヒエラルキー画像



Sceneビュー画像



Gameビュー画像



 石のゲームオブジェクトの大きさを変えたり回転させて組み合わせることで、別のゲームオブジェクトとして成立します。

 こういった複数のゲームオブジェクトを使って1つのゲームオブジェクトとして振る舞わせる際には、ヒエラルキーをみていただくとわかるように、
フォルダ役の空のゲームオブジェクトを作成し、その子オブジェクトとして実際に配置するゲームオブジェクトを並べるようにするとよいでしょう。
これまでに学習してきた、UIの部品を作成する際や、両端にあるフェンスのゲームオブジェクトを作成する際と同じ手法です。

 このようにしておくことで、サイズを変更したり、移動させたりする際には親のゲームオブジェクトを変更すれば、子オブジェクトも自動的に反映されます。


<検証動画 親子関係を利用して設置する 
https://gyazo.com/9f956ad21f8c8b31196331a4df65ca74


<検証動画 親子関係を利用して設置する◆
https://gyazo.com/8c025a73854d0d540bda8a7b8105ff07



 ここではさらに、このトンネルのゲームオブジェクトの先にサークルのゲームオブジェクトを配置しています。


Sceneビュー画像



Gameビュー画像



 しばらくそのパターンで作成したら、サークルの代わりにモグラを配置するようにすれば、ユーザーが罠にかかる可能性が上がります。
何故なら、トンネルの先にはサークルがある、というパターンを覚えてしまうため、トンネルを見つけるとくぐりに来る可能性が高いからです。
 
 そういった思考ロジックも、実際にゲームオブジェクトを配置して遊びながら考えてみてください。


3.フロアの繋げ方のロジック


 フロアの斜面のつなぎ目を同じ高さでつなげて製作していけば、スキー場のようになだらかなイメージのステージになります。


Sceneビュー画像



Sceneビュー画像



Gameビュー画像(ずっと斜面が続いている)




 もしも平坦なコースにしたくないのであれば、フロアとフロアの間を高さを少し空けることで、上のフロアから下のフロアへ落下移動させることも出来ます。
このようなステージのデザインの場合には、次のフロアの高さを低くしておく必要があります。そうしないと落下した際に飛び移れません。


Sceneビュー画像



Sceneビュー画像



Gameビュー画像



<検証動画>
https://gyazo.com/5decee3ae3affa7cc09c67e98ac6c323


 この場合、気を付けないとならない点がいくつかあります。

 ・プレイヤーにジャンプを強制しない程度の幅・高さにする
    => 滑っていて自然に落下できるくらいの幅と高さにしてください。
      あるいは、ゲームのデザイン部分から変更するのであれば、上手くジャンプしないと次のフロアに進めない、という作りにしてもよいです。

 ・プレイヤーの滑空速度が低い場合、空中に落下しないようにする
    => フロアの間隔を空け過ぎないようにしてください。

 ・プレイヤーの滑空速度が速い場合、次のフロアを一瞬で過ぎてしまわないようにする
    => 障害物が少なく、あまり停止する可能性がないフロアの場合には、その先にある次のフロアの長さを少し長くしてください。

 ・フロア間の高低差をつけすぎると、次のフロアを飛ばしてしまう恐れがある
    => その先にある次のフロアの長さを少し長くしてください。

 ・障害物の頭上に接触すると、予期せぬ高さまでジャンプする可能性がある
    => フロアから飛び出さないのであれば問題ありません。ただし、怪しい場所は何回も試してみて確認します。



 実際にフロアを作成しながら遊んでみてください。そうやっていることで、新しい改善点や問題点が見えてくる場合があります。
その時にはどのようにして対処をするべきか、問題と向き合って、よりよいゲームになるように楽しみながら製作してください。

 例えば、わざとゆっくりと進まないと落下時に通過してしまうような短いフロアを用意して、そこにはサークルをたくさん配置しておく
フロアの最後でタイミングよくジャンプすると上のフロア、そうでない場合には下のフロアというように上下の分岐を作る
次のフロアが左右2つに分かれていて、どちらかを選択して進むようになっている、などです。


<分岐のロジック ‐絏爾離侫蹈構造を活用する。この例の場合は、ゆっくり進むことで下のフロアへ行ける分岐。通常は上のフロア>



<分岐のロジック◆〆険Δ諒岐を作る。高さは別々にしても問題ない>



<検証動画>
https://gyazo.com/105c896f15f55f53ea90f6eb344c5f83


4.最後のフロアに GoalSet ゲームオブジェクトを配置する


 複数のフロアをつなげてステージにしていますので、ゴール役の GoalSet ゲームオブジェクトは一番最後のフロアに高さを合わせて設置してください。


Sceneビュー画像



 以上でステージが完成しました。

 学習と製作、おつかれさまでした! 
無事にスライダーゲームの完成になります。


40.通して遊んで不具合はないか確認し、新しく追加する要素を考える


 この手順ではゲームを遊びながら、不具合がないか確認をおこなったり、どんな要素を追加すればゲームを面白くできるかを考えて発展へとつなげます。


1.不具合はないか確認する。問題があったらトライ&エラーで繰り返し調べる


 ゲームをたくさん遊びましょう!

 そして問題点がないか、ボタンの制御はうまくいっているか、見えにくい部分、分かりにくい部分はないか、などをメモなどに書き留めておきます。


2.<【この挙動は遊んでいて問題ないかな?】という視点で考えてみる>


 不具合が見つかったら、どこに原因があるのかを特定します。
Unity 側の問題なのか、スクリプトの問題なのか、プレファブなどのゲームオブジェクトの問題なのか、
どこに不具合の原因があるか"当たり"をつけて調べるのはよいことですが、調べる場所をそこだけにならないようにしてください。

 常に視野を広く持ち、どこに問題点が潜んでいるかを、自分で勝手に決めつけてしまわないようにしましょう

 不具合を特定するには、問題点を切り分けて考えていく手法が有効です。ここかな? と思った場所を順番に調べていきます。
そして問題がない場所が増えれば、問題として怪しい場所が徐々に浮き上がってきます。

 根気よく、粘り強く、不具合と向かいましょう
 自分で作成したゲームですから、必ず原因がありますので諦めずに

 エンジニアによって大切なことは、この気持ちです。

 不具合が見つかったら、どのように修正すべきかを、たくさんの選択肢を用意して置けるようにします。
そのためには、検索して調べる力、それを活用する知識と技術が必要になります。
 
 新しい知識や技術を1つ手に入れることが出来れば、それはゲーム製作だけではなく、
不具合を解決する引き出しを1つ増やしたことにもなります。逆もまた真なり、です

 ここでも大切なことは、1つの方法だけにこだわり過ぎないことです。
目的はどのような実装をするか、ではなくて、どのようにゲームが正常に動くようになるか、
そのためには、どのような制御が必要になるか、というように考えて取り組みましょう。

 不具合の解決に向かった分だけ成長しますので、常に成長のチャンスとして捉えましょう


3.追加する要素を考える


 自分で楽しそう、面白そう、これは実装できるかも? ということをたくさん考えてみましょう。
そして、そのロジックを考えて、どのようにすれば実装できるかを調べてみましょう。

 調べる際のコツは、ゲーム画面でどう動いているか、ではなくて、
それをプログラム内の処理に置き換えたらどうなるか、という風にロジック化して物事を考えていくことです。

 例えば、キャラを吹き飛ばす、というゲーム画面での処理があったとします。
これをそのまま調べて見つかる記事も、もしかしたらあるかも知れません。ですが、見つからなかったら、どうしますか?

 調べ方を変える、という方法を是非、念頭に置いておいてください。

キャラを吹き飛ばす、ということをプログラム内の処理に置き換えてみてください。
ゲームオブジェクトを指定した方向に移動させる、というプログラムが浮かび上がってくるはずです。
では、どうやって移動をさせれば、「吹き飛んでいるように」移動をさせることができそうか、というように考え方を変えていきます。

 ロジック化するには、こうやって、1つの物事を色々な側面で判定し、その答えをまた、判定していきます。
慣れるためには、たくさんの処理を書いて読むことだけです。がんばりましょう!


 アイテムの追加、ルールの追加、障害物の追加、ステージ制の追加、などなど、色々な要素を追加することで、自分だけのゲームが誕生します。
製作したゲームはどんどん公開してください。

 例えば、現在のゲームにはまだ未実装のシステムがあります。

 ・ゲームオーバーの処理をどうするか
    => プレイヤーにライフを持たせるのか、ライフはなくて必ずゴールまで行けるのか、ゴールまで行ける場合には何かゲームオーバーに変わるペナルティを用意するのか、など。

 ・残り時間の処理をどうするか
    => 残り時間が 0 になったらゲームオーバーにするのか、あるいは 0 からスタートして、クリアまでにかかった時間を測るようにするのか(RTA…Real Time Attack 方式)

 ・プレイヤーの最高速度の制限を設定するか
    => 同じ角度の斜面を滑っていくほど、プレイヤーであるキャラの加速度は増していき、フロアが長くなるほどスピードが上がっていく。
      そのままでもよいですが、あまりにもゲームとして破綻してしまうようなケースの場合には、最高速度を設定し、それ以上は加速しないように制御することを考える。
      あるいは、ゲームのデザイン部分から設計し直して、すごいスピードでどんどんと滑っていくゲームにしてもいい。

 ・ギミックを考える
    => ジャンプ台、通過すると速度が一時的にアップするパネル、キャラが一定の位置を通過すると落とし穴が出来て、下のフロアへ落とされてしまう、など。


 このように遊んでいて思いついた項目を拾いだしてみて、ルールとして追加する、しないという部分から検討することで設計を考えていくことが可能です。


 以上でこの手順は終了です。

 おつかれさまでした!

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Menu



技術/知識(実装例)

2Dおはじきゲーム(発展編)

2D強制横スクロールアクション(発展編)

3Dダイビングアクション(発展編)

2Dタップシューティング(拡張編)

レースゲーム(抜粋)

2D放置ゲーム(発展編)

3Dレールガンシューティング(応用編)

3D脱出ゲーム(抜粋)

2Dリアルタイムストラテジー

2Dトップビューアドベンチャー(宴アセット使用)

3Dタップアクション(NavMeshAgent 使用)

2Dトップビューアクション(カエルの為に〜、ボコスカウォーズ風)

VideoPlayer イベント連動の実装例

VideoPlayer リスト内からムービー再生の実装例(発展)

AR 画像付きオブジェクト生成の実装例

AR リスト内から生成の実装例(発展)

private



このサイト内の作品はユニティちゃんライセンス条項の元に提供されています。

管理人/副管理人のみ編集できます