私が取り組んでいるゲームで問題に遭遇しましたが、それはおそらく多くのゲームで登場するかなり基本的なことのようです。
私のゲームでは、キャラクターアニメーションの特定の時点でゲームプレイ機能を実行する必要があります。そして、タイトルが示すように、ゲームプレイ関連のイベント/機能/アクションをキャラクターのアニメーションの特定のポイントに同期するためのいくつかの優れたテクニックと基本的な戦略は何なのかと思っています。
ここでは、さまざまな種類のゲームで私が話していることの簡単な例をいくつか示します。
あなたのキャラクターはシューティングゲームで彼らの銃をリロードします。キャラクターは「リロード」アニメーションを再生しますが、currentAmmo変数を設定する関数は、マガジンが交換されて銃がコックされた直後にのみ呼び出されることが重要です。これは、リロードアニメーションの途中の可能性があります。
では、ターンベースのRPGあなたのキャラクターは敵のラインが直面しているラインに立ちます。攻撃するように命じられると、キャラクターの1人が敵の1人まで走ったりジャンプしたり、立っている場所に走ったりジャンプしたりする前に巨大な剣を斬ったりします。スラッシュアニメーションが再生される正確なタイミングで敵がダメージを受けていることを確認する必要があります。
ではステルスゲーム、あなたのキャラクターがこっそりすることができ、世界でコンピューターとボタンと対話します。多分あなたが浸透している前哨のライトへの電力供給をオフにするボタンがあるでしょう。アクションボタンを押すと、キャラクターが手を伸ばしてボタンを押し、アイドル状態に戻ります。ボタンが押されたときに、「push_button」アニメーションの正確なポイントでライトをオフにしたい。
確かに、私の特定のケースは2番目の例に最も似ています。この例では、攻撃中にターンベースのキャラクターが前方に突進するアニメーションを作成し、アニメーションが接触していると思われる瞬間にダメージを適用したいと考えています。 。私のゲームはターンベースのシステム(ファイナルファンタジーやファイアーエンブレムのようなものを想像してください)を使用しているので、ダメージ/ヒーリング/マジックなどが必要です。実際にコリジョン/ヒットボックスを使用していなくても、各キャラクターアニメーションの正しいタイミングで適用されます。
私は人気のあるゲームエンジンでゲームを作成していること、そして今はアニメーションイベントまたは通知を使用してこれを処理し、望ましい結果に近い何かを達成することを言及しなければなりません-キャラクターが特定のコマンドを実行してトリガーしますコマンド固有のアニメーション(つまり、「attack_command」)と各コマンドのアニメーションアセットには、アニメーションイベントを含める/キャラクターのExecuteCommand関数に「コールバック」を通知する必要があります。言い換えると、キャラクターは攻撃アニメーションに再生を指示し、攻撃アニメーションはダメージが与えられるべきアニメーションの正確な瞬間にイベント/通知コールバックをキャラクターに送信します。
正直なところ、これは今のところ機能しますが、ここでは全体像の一部が欠けているように感じられます。このメソッドが間違っていると感じる理由の1つは、ゲームロジックとアニメーションアセットを結合することです。アニメーションアセットにExecuteCommand()イベント/コールバックを含めるのを忘れた場合、コマンドは正しく実行されず、コマンドを実行せずにコマンドアニメーションが終了したかどうかを確認するには追加のコードが必要です。それは乱雑で、私のゲームプレイがそのアセットに奇妙な依存関係を持っていることを意味します。もちろん、攻撃アニメーションの特定の時点でダメージが発生するようにしたいのですが、アニメーションアセット内のゲームプレイコードを呼び出すのはとても変です。
だから私はここで見落としているものは何ですか?アニメーション中に特定の時間に特定の重要なゲームプレイアクションを発生させたい場合に、このようなタイプの状況を処理するための優れた一般的なテクニックは何ですか?
編集:明確にするために、これはエンジン固有の質問ではなく、エンジン固有の設計/手法も探していません。使用しているテクノロジーに関係なく、ゲームプロジェクトで使用できる一般的なアニメーション/ゲームプレイ同期手法に興味があります。