キャラクター/オブジェクトの相互作用アニメーションは、等尺性ゲームでどのように機能しますか?


10

机やホワイトボードなどの通常の家具が置かれたオフィスをプレイヤーが見るアイソメトリックビジネスシミュレーションゲームを計画しています。

ゲーム内のキャラクター(スタッフ/ NPC)は、デスクのキーボードでの入力やホワイトボードへの書き込みなど、事前定義されたタスクを実行して、これらのオブジェクトと対話する必要があります。

特に私が興味を持っているのは、次のシナリオです。

キャラクターはオフィス(1)を横切って自分のデスク(2)に移動し、座ってタイプし始めます(3)。

私が理解していることから、キャラクターの動き(1)にはスプライトシートがあり、デスク(2)には静的なスプライトがありますが、3番目のステップの処理方法がよくわかりません。

デスクとキャラクターの両方を含む複合スプライトはありますか?私はそうではないと思います。さもなければ、すべての机とキャラクターの組み合わせにスプライトシートが必要になるでしょう。

これは通常どのように処理されますか?

編集:

ゲームTheme Hospitalの具体的なアニメーション例を以下に示します。あなたはここでビデオを見ることができます

私が見る限り、アニメーションはいくつかのステップに分かれています。

ステップ1-キャラクターは机と椅子の間を移動します。

ここに画像の説明を入力してください

これは、椅子とデスクが実際には別々のスプライトであることを示唆しています。

ステップ2-キャラクターが座るアニメーション

ここに画像の説明を入力してください

一番最後のフレームで椅子が机に近づいていることに注目してください。

ステップ3-デスクのアニメーション

ここに画像の説明を入力してください

ステップ4-立ち上がるアニメーション

座るのと同じですが、逆に演奏されます。

ステップ5-離れる

通常の移動アニメーションを使用して離れます。

私の質問は、これらのアニメーションをどのように分離するのが最も良いか、グラフィックアーティストが通常これらのアニメーションをどのように提供するのかということです。

キャラクターが机に座って入力しているのは、実際には3つの異なるスプライト(机、キャラクター、椅子)ですか?同様のアニメーションのスプライトの例を知っている人はいますか?

編集2:

私の最大の懸念は、スプライトが実際にどのように見えるかについて正しい期待を持っていることだと思います。私はそれらを自分で描くことができないので、それを行うには誰かにお金を払わなければならないでしょう、そして私はこれらの種類のアニメーションを行う何らかのベストプラクティスの方法があると思いますか?

回答:


8

簡潔な答え?スプライトを組み合わせないでください。
つまり、組み合わせる場合は、すべての組み合わせのアニメーションが必要になります。1つの椅子だけが必要な場合は、奇妙に思えます。しかし、あなたのオフィスが中間のゲームで拡張される可能性があるというふりをしてみましょう。そこでは、椅子がより良いスプライトを持っています。椅子のスプライトを追加するだけですか、それとも再結合してすべての雇用主のすべてのアニメーションを再度追加しますか?

いくつかの計算をしましょう。

雇用主がタイピングするアニメーションに6つのスプライトがあり、5つの異なる椅子があり、10の異なる雇用主タイプがあるとします。

雇用主を椅子の上に描くだけの場合、これには10 * 6 + 5スプライト、65スプライトが必要です。
組み合わせてすべての組み合わせを作成すると、10 * 6 * 5のスプライト、つまり300のスプライトが必要になります。単純なアニメーションでスプライトシートをこれほど大きくするのは、あなたにとって大変なことです。

編集:

まあ、方法がわからない場合は、椅子を背景、スタッフをアクティブなスプライトとして定義することをお勧めします。あなたにとってより簡単です。

Background.draw();
Foreach(employer i in staff)
    I.draw();

それはあなたのスタッフをあなたのchais(background)から切り離しておくべきです。また、スタッフアニメーションのフレームも独立して更新します。

EDIT2:

あなたの編集とサンプルを見ました。私は同じアプローチを続けます。すべての異なるスプライト。とにかく椅子はキャラクターの前に行くでしょう!

椅子を近づけるには、その位置を上下に数ピクセル更新するか、スプライト自体でこれを実行します。

Zアラインについて理解していますか?それは多くのことを再生するはずです...

椅子の一部がキャラクターの後ろにあり、他の部分が前にあることがわかります。それで、スプライトが1つだけの場合、これはどのように可能ですか?Z整列!

効果を達成する2つの方法。マスクを維持する(それほど簡単ではない)か、スプライトを2つに分割します。

時間がないので、2番目の方法についてのみ説明します。椅子のスプライトは、前になる部分と後ろになる部分をカットする必要があります。次に、それらを同じ位置に置きます。簡単!ここで再生されるのはZ Alignです。後ろのパーツ​​は後ろに、中央のキャラクターは前の椅子のパーツを前に描画します。

使用しているlib / api / sdk / toolsetがわかりません。しかし、ほとんどはこの方法で行います。背後にあるもの、前面にあるもの、または最初に描画されるものは後ろに、最後に描画されるものは前面にあるものを決定するz Align係数を使用します。したがって、これを覚えておく必要があります。


はい、ありがとう。私もそう思ったのですが、アニメーションがどうやって実現するのかわかりません。私が見ることができる例を知っていますか?それが一番いい!
Patrick Klug、2012年

コードかゲームか?ゲームが必要な場合は、KairosoftのAndroidおよびiOS用ゲーム開発ストーリーをご覧ください。知らないコード例...
Gustavo Maciel 2012年

回答を修正しました。それがあなたのニーズに合っているかどうか確認してください(:
Gustavo Maciel 2012年

特定の例で質問を更新しました。私はスプライトがどのように見えるか、またはグラフィックアーティストが提供するために使用されているものに本当に興味があります。GameDev Storyのアニメーションは、私が考えているものに対して、少し単純すぎます。
Patrick Klug、2012年

Edit 2を読んで、答えを改善しました。ニーズをカバーしてくれることを願っています。
Gustavo Maciel 2012年

2

別のアイデアは、3D API(OpenGL)がポリゴンがオーバーラップしないようにする方法と同様に、スプライトに深度/ Zバッファー画像を含めることです。基本的なスプライトゲームの場合は、0/1ビットの束(白黒のビットマップ)にすることができます(ただし、必要に応じてより多くのレベルの深度を使用することもできます)。

組み合わされた「デスクチェア」スプライトがあり、その正方形上の他のスプライト(つまり、人々)の前に椅子を表示したい場合は、Zバッファバージョンのcharを「黒」にし、デスクは「白」にします。 。

そのタイルで動的スプライト(人物)をレンダリングすると、深度バッファーの色が確認されます。ピクセルが0(黒)の場合、人物のスプライトピクセルの描画をスキップし、椅子のピクセルはそのままにしておきます。

一度にすべてのピクセルをチェックするのではなく、チェックを行う最も簡単な方法は、スプライトピクセルに深度バッファー値を乗算することです。これは、より近い深度が0になり、キャンセルされるためです。次に、もちろん、カラーキーを使用する必要があります(アルファカラーチャネルがない場合)。

これはもちろんオーバーヘッドを追加します(ただし、デスクチェアのように複数の深度レベルを必要としないものはスキップできます)。また、アニメーションを同期する必要があります(つまり、人は机の椅子のアニメーションと一致させる必要があります)。個別のスプライトの束全体を用意するのと同じ柔軟性はありません。


編集で言及したマスク付きの深度レイヤー(:
Gustavo Maciel '20
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.