Unity 2Dアクションの作り方【レベルデザイン】

make 2d action thumbnail

さて、今までの解説でだいたい基本的なオブジェクトが作れるようになったと思うので、今回はレベルデザインについて解説していきます。

この記事は本のように順を追って解説しています。この記事は途中のページになります。
この記事を見ていて、現在の状況がわからない場合や忘れてしまった事などが出てきたら↓のリンクから目次ページへ飛べますので立ち戻って見てください。

<レベルデザインとは>

レベルデザインというのはゲームのバランス調整や、ユーザーに対する「体験」を段階的に設計していくことを言います。

難しく言ってますが、純粋な2Dアクションゲームで言うと「ステージを作成していく事」になります。1面、1面を作っていくという感じです。ギミックやアイテム、敵も含めての意味になります。

アクションに、レベルなどのRPG要素が加わると、そこもレベルデザインの範疇になるのですが、今回はマリオのような2Dアクションを作るということで、「純粋な」2Dアクションの場合のレベルデザインとはステージを作成することと言えると思います。

オブジェクトやギミック、敵の作り方、地面の作成方法など、今まで解説してきたことを駆使すればステージを作っていくことができそうです。

地面はタイルマップで作成し、オブジェクトはプレハブにしてしまってポンポン配置してしまえば、様々なおもしろみのあるステージが作れそうですね。

つまり今までの解説でレベルデザインが、既に可能になっているということですね。

タイルマップ、プレハブについて忘れてしまった方は↓の記事を参考にしてください。

レベルデザインはステージを作成する事ですが、語弊があるような気もするので言い直すと、「どのようにして面白いステージを作成するのか」がレベルデザインと言えると思います。

が、「何が面白いのか」は個人によると思うので、そこは皆さんにお任せして思い思いのステージを作成して頂ければと思います。

なんかメリハリが大事だとか、難易度は上下しながら上昇した方がいいとか、障害と報酬だとか、色々な「レベルデザイン論」みたいなのがありますが、これに縛られると自由な発想ができなさそうなので、筆者は皆さんにお任せしようと思います。

「面白い」レベルデザインの提供は皆さんの個性を発揮していただければいいかなと思いますが、「これはいかん」というレベルデザインもあるので今回は2Dアクションを作る上であんまりやらない方がいいレベルデザインを紹介したいと思います。

まぁ、よく考えなくても常識的にわかるだろって事が多いんですが、ついうっかりみたいなこともあるので

<やってはいけないレベルデザイン>

速すぎるオブジェクトがたくさんある

以前にUnityにおける移動とは点の移動だ。的な事を解説しました。↓の記事で解説しています。

移動が点であるということは、速過ぎるオブジェクトは壁を突き抜けます。

普通の速度なら、↑のマルとマルとの間隔は非常に微小なのですが、速くなるにつれ、間隔が広くなっていきます。そして、壁の厚さの半分より、マルの間隔が広くなってしまう(半分の厚さを越えると反対側に押し出されるため)と壁を突き抜けることができてしまいます

Unityの物理演算で移動させた場合、この点による移動を計算によって、ある程度補完してくれます。そのため、Unityのおかげで突き抜けるといった事が起きにくくなっています。

しかし、あまりに速すぎるとUnityの計算による補完をしても、物体が壁を抜けてしまいます。

Unityの設定で計算の精度を上げることもできるので、その設定にすると突き抜けを更に防ぎやすくすることもできるのですが、この処理は重いです。速いオブジェクトの数が少ないと大丈夫なのですが、計算精度を上げたオブジェクトがたくさん存在すると重すぎてカクカクになります。

マリオのキラーのような敵が凄まじい速度で壁を貫通してきたらゲームにならないと思うのでやめましょう。

思いつきでスピードが上がるアイテムを追加する

さて、↑の速すぎるオブジェクトと関連するのですが、ちゃんとステージを作っていった後、突然の思いつきでスピードが上がるアイテムなどを追加するのはやめたほうがいいです。

ちゃんと壁抜けできないように作っていたのに、突然の思いつきでこういうものを追加してしまうと、今まで作ってきたステージのデバッグのやり直しが入ります。

この例で一番危険なのは、今回の解説では作っていませんが、「スライディングなどの瞬間的に速く移動する技」などがある場合です。瞬間的に速く移動する行動をプレイヤーができる場合、これに掛け算して速度が速くなってしまうと、壁を突き抜けることができてしまうかもしれません。

また、「プレイヤーがIsTriggerなどの判定内を通過した場合」の処理もテストし直しになります。例えば、「プレイヤーがこの場所を通過すると、壁が迫ってくる」などですね。

衝突する物理演算はUnity側が補完してくれますが、IsTriggerの「判定内に入ったら」という場合は点による位置しか見ないので、スピードが上がったことによるすり抜けができるようになってしまいます。

このようにすり抜けが起こった場合、Triggerによるイベントを発生させずに先に進んでいくことができたり、壁の中にハマったり、壁の向こう側の異次元空間に放り出されて、ゲームを再起動するしかないみたいな状況になってしまいます。

こういうのを利用した裏技のようなものが楽しまれていたりしますが、それは上手い具合にショートカットなどができたケースなのであって、大抵の場合、異次元に放り出されて、もうただ見ていることしかできないことになると思うので、できるだけ避けた方が無難です。

そのため、スピードが変化するアイテムなどを作ろうと思っていた場合、制作序盤のウチに作ってしまい、ステージ内で抜けてしまうポイントがないか、チェックする必要があります。

速すぎる状態がある場合、ちゃんと問題ないか試しながら作りましょう

このように、動作確認が大事なものを、思いつきで途中から変更を加えたりしない方がいいです。プランナーの方は、そういう予定がある場合、早めにプログラマーの方に相談してください。

透明なオブジェクトが大量にある

以前にも開設しましたが、透明なオブジェクトは凄く重いです。そのため、大量に透明なオブジェクトを作ってしまうと、ゲームがカクカクします。

エフェクトが大量に出ているゲームでカックカクになることってよくありますよね。あれはエフェクトに透明なオブジェクトが含まれているからです。

エフェクトに限らず、透明なものを含んでいるオブジェクトがたくさん存在するとカックカクになるので、慎重に配置しましょう。

ちなみに、ハイスペックPCでスムーズに動いていても、プレイヤーはどんなスペックの端末で動かすのかわからないので、ロースペックでも動くように設計しておくといいかもしれません。

復帰ポイントの近くに敵がいる

やられた瞬間、復帰したところに敵がいるパターンです。復帰してきたときに即敵にぶつかってしまってはプレイしづらいです。

continue

こんなことするやついないだろ。と思うかもしれませんが、これ、よくあるのが復帰ポイントより、元々遠くに敵を配置していたパターンです。

遠くにいるから大丈夫だろと思ったら、時間が経つことによって復帰ポイントの近くに来てしまってハマってしまう感じです。

  1. 敵は最初遠くにいる
  2. プレイして時間が経過する
  3. 敵が復帰ポイントの近くにたどり着く
  4. 敵が復帰ポイントの近くにいる時、全く別のところでやられる
  5. 復帰した瞬間に敵が目の前にいる

これに対応するには、例えば、やられたら敵の位置を元に戻すとか、戻さないのなら、復帰ポイントを絶対に敵が通過しないようにするなどすれば良さそうですね。

先が見えづらい、プレイしづらい

アクションゲームなどは先を見ることによって予測しながらプレイすることがよくあると思います。

意図して先を見せないのならいいですが、カメラの都合などで先が見えないとプレイヤーが操作しづらいですし、単純に理不尽です。

cannot look ground

特に、ジャンプに合わせてカメラが上昇し、今まで見えていたものがジャンプした瞬間見えなくなってしまうような状態はなるべく避けたほうがいいかもしれません。

意図した演出や難易度ではないのなら、プレイヤーがもどかしさや動かしづらさを感じるような事はやめましょう。

カメラについては↓の記事で解説しています。

詰みポイントがある

詰みポイントがあるとやはりストレスになります。

ここで言う詰みポイントは「難し過ぎる」というスラング的な詰みポイントではなく、マジで動けなくなってしまうようなポイントです。

そういう箇所を意図的に追加したい場合は自爆可能なポイントを作るなどして、ゲームを再起動しなくても大丈夫な状態にしてあげる必要があります。

意図的に追加したい場合は別にいいのですが、問題は、意図せず詰みポイントになってしまうケースです。

例えば、敵を踏んで上昇する事で次の場所へいけるところがあったとして、敵がいなくなってしまった場合、クリア不可になってしまいます。

この場合は、敵が一定時間で復活するなどの対処をして、元の状態に戻す必要があります。

ステージの状態が刻々と変化している場合、プレイヤーがどのような状態になっても進めるようなギミックにしておきましょう。

画面外の敵が勝手にいなくなっている

ゲームを放っておいたら勝手に敵が落ちていなくなった。など、敵やオブジェクトが動いている場合、プレイヤーが見ていないところでステージの状態が変化してしまうケースがあります。

そう言った事を防ぐために今までの解説では画面外で行動を制限する設定を加えていたわけです。

enemy

とはいえ、例えば、「画面外から攻撃してくる」みたいな敵を作りたい場合もあると思うので、その辺りをちゃんと設計してあげる必要があります。

画面外から攻撃してくる敵がたくさん居たはずだけど、ゲームを放置してたら全員落ちて居なくなっていたとなってしまってはゲームが面白くないですからね。

というわけで、やってしまうとまずいことに注意しつつ、皆さんの好きなステージを作ってもらえればと思います。

stage

次回はボス戦の作り方について解説していきます。


タイトルとURLをコピーしました