ゲーム背景に説得力を出す【動き】
今回は【動き】編となります
前回の【もの】編は下記から
動きとは

背景には、様々なオブジェクトが配置されます。
動きとは、配置したオブジェクトに対しての動きをつけることになります。
とまあ、そんなのわかるよ!と思いますが、ここが重要なのです。
ですが、すべてのオブジェクトを【動かす】となるとそれは、実際には、無理な話となります。
そこで優先度が必要になります。
優先度をつける

優先度は、ゲーム制作における工数を管理するためには、非常に有効であります。
例えば、Aというオブジェクトを動かすためには、1日かかるが、Bというオブジェクトを動かすためには、3日かかる。
上記のような場合は、Aのようなオブジェクト多く仕込めばそれだけ期間内にたくさん動かせるようになります。
ですが、視界に入るのが実は意識してカメラを向けないと見えないとか、小さすぎてわからないとかになってしまうとAというオブジェクトを動かす意味がなくなってしまいます。
優先度のつけ方
優先度としては下記のような感じ(Aが高く、Cが低い)
- その背景のキーとなるオブジェクト(優先度A)
- 巨大なオブジェクト(優先度B)
- 他の背景でも使われるオブジェクト(優先度C)
という感じの優先度をでつけていくと効果的です。
意識したいところは、その背景の中のキーとなるオブジェクトを優先的というところです。
背景を動かす処理を入れてもらう

優先度と書いていましたが、その前にここを実装してもらわないと優先度も何もありません。
背景は、ものを配置しちゃえばそれでいいんだろう?
とそれだけでしたら、動かす処理が入っていない場合があり、またそれをプロジェクト中盤からいきなり言われたりしたら、プログラマーは間違いなく憤慨します。
なので、プロジェクト開始時に、ある程度の想定して背景のオブジェクト動かしたい!こんな感じに!というのは、作成しておき、仕様として組み込んでおくとよいです。
巨大なものはかなり注意が必要

巨大なオブジェクトは、動かすとかなりのインパクトを与えることができますが、注意点があります。
巨大なオブジェクトが遠方から見えるというのは処理がかなりかかるオブジェクトになったります。これは、正直プログラマーの力量が試される形ではあります。
私自身、相棒のプログラマーに恵まれたため、超巨大なものなど動かすことができたときは、かなり感動を覚えました。正直なところ開発当初からそこを狙っていたため、それが完成しないとのが、背景の売りがなくなってしまうところでもありました。
アニメーションデータ

オブジェクトに動きをつけるには、アニメーションデータが必要になります。
このデータをどう組むのか?というのが考える必要があります。
アニメーションデータを入れるのかどうか?
ここでいうアニメーションデータとは、3Dツールなどで作成したアニメーションデータとなります。
それ以外にもプログラマーに簡単な動きを入れてもらうということもできると思いますが、調整が効きやすくするためには、アニメーションデータを登録し、適応させることができるようにすると楽です。
ただし、自分が3Dツールを使えない場合は、デザイナーに任せる必要があるため、工数がかかります。なるべくシンプルな動きにしましょう。
※私の場合は、3Dツールも使えたので、自分でアニメーションデータを作成して反映させていました。実験データなど作成できると実装も早いので非常に良いです。なので少しだけ使えるだけでも全然良いと思います。デザインできるレベルまでは覚える必要がないので。
持たせるデータの考え方

アニメーションの中には、考えられるデータの持ち方が3つあります。
①オブジェクトそのものを動かす
②各パーツ毎にオブジェクトを動かす
③ボーンデータを使い動かす
④物理演算を使い動かす
※頂点を使ったシェイプアニメーションとかもありますが、基本的には必要ないと思いますので、この3つから。
①オブジェクトそのものを動かす
これは、対象のオブジェクトを移動、回転をさせます。例えば、立方体があった場合に、その立方体をそのままぐるぐる回す感じです。
立方体の中に球体などが存在していたとしても、同じように追従させた動きとなります。
②各パーツ毎にオブジェクトを動かす
これは、①で説明した、立方体の中に球体が存在しその球体には別の動きをさせたい場合には、必要になります。
ですが、この場合は、オブジェクトに親子関係などを設定させたアニメーションデータを流す必要があります。別々にオブジェクトを分けて動かすということも出来なくはありませんが、地球と月のように、太陽の周りをまわりながら月は地球の周りをまわっているという動きが必要な場合は、必要になるでしょう。
※パーツ毎に動かしたい場合は、オブジェクト3Dシーン内で分ける必要も出てくると思います。
③ボーンデータを使い動かす
ボーンデータを使うとなるとキャラクターモデルと変わらないものとなります。
ですが、このボーンデータを使えるようにするということは、かなりハードルが高く、アクション担当のプログラマーにお願いしなければならないとかそういう制約も出てきます。
それにボーンデータを入れてたアニメーションデータで何をやりたいのかは、明確にしておかないと工数が他のに比べてかかるので、注意です。
※元がアクション担当のプログラマーが背景をやってくれているならば、組み込みは楽かもですが。
④物理演算を使い動かす
例えば、ものが転がるとか、壊れるなど、現在だと物理演算を使って表現することもできます。
ですが、物理演算とは、アニメーションデータとは違い、必ずしも同じ演出にはならないという特性があります。
これはどういうことかというと、必ず、キャラクターの右側にオブジェクトが転がってくるとした場合、アニメーションデータを入れていた場合は、そのままアニメーションデータに沿った動きをしますが、物理演算の場合は、その途中で敵にぶつかったり、なにか地面の起伏によって、ちょっとした出現位置の違いによって動きが異なることになります。
動きをつけるには

まずは、どういう動きを付けたいのかを考え、そしてどう動かすのかも考えます。
そしてそこができたら、プログラマーに実装のお願いをして、その後優先度をつけ、アニメーションデータを作成していきます。
オブジェクトデータをどのように納品すればいいのか、アニメーションデータはどのように作成し、の品していくのかというのを考えていくと実装し、反映させることができると思います。
また、サウンドが必要であれば、そのサウンドも用意しておきましょう。
これ結構あとで必要だったなーというのがあったりするので、ある程度先に出しておくとのちの工数問題に悩まされなくて済みます。
コメント