お世話になります。
Cubism Native SDK(DX11)でADVゲームのスキップ処理を実装しようとLAppModel.cppのStartMotion()に下記のような処理を追加して試してみましたがパーツ切り替え部分のフェードイン処理が発生してしまい完全にスキップすることができません。
他にモーションスキップを行う方法がありますでしょうか?
よろしくお願いいたします。
if (skip) {
auto t = motion->GetDuration();
motion->SetOffsetTime(t);
motion->SetFadeInTime(0);
motion->SetFadeOutTime(0);
}
obs
2
こんにちは。
ADVゲームのスキップ処理というのがいまいち掴めないのですが、
例えば、特定のセリフで特定のモーションが再生されるようになっているが、
プレイヤーがそのセリフのモーションの再生中に次のセリフに進めた場合、
モーションがキャンセルされ、モーションが再生されていない最初の状態に瞬時に戻ることを指していますでしょうか?
(説明が分かりにくかったらすみません。)
また、想定していらっしゃる挙動は、
パーツが切り替わる際のフェード処理すらもさせたくなく、瞬時に切り替わる感じでしょうか?
こんにちは。返信ありがとうございます。
はい。想定しているスキップ処理としましてはアイドルモーションがない状態でモーションを再生したときにそのモーションの最後の状態に瞬時に切り替わりポーズを保持するようなことです。スキップですのでその状態への遷移のフェードも一切発生しないのが理想です。(初期のポーズには戻しません)
ですので、モーション再生時にDurationと同じ量をOffsetに設定したのですが、パーツ切り替えのフェードが発生してしまいます。
このフェードを抑制するような方法や他の手法などご存知でしたらお教えいただけないでしょうか?
「いいね!」 1
obs
4
詳しく説明ありがとうございます。実現したい挙動について理解できました。
現状、恐らくですが公開APIとしてパーツのフェードを抑制する方法はないかもしれませんね。
Frameworkのポーズのupdate処理に直接手を加えるのはどうでしょうか?
CubismPoseの以下の行でフェード処理を行っている箇所があります。
ここをコメントアウトすればひとまずフェード処理は消えるはずです。
後はこのCubismPoseを継承してカスタムし、スキップフラグを持つ関数を作成するか、直接Poseのアップデート関数を修正して第2引数にフラグを持つことができるように改造するかなど、いくつかの手段が考えられます。
以上、回答になっていますでしょうか。
obs様 ありがとうございます。
お教え頂きましたCubismPose内のDoFadeにスキップフラグを持たせフェードイン・アウト共に即時終了できるようにして目的の処理を実装することができました。
Frameworkに変更を加えず処理できる方法があればよかったのですが、今回はこの方法で行こうと思います。
大変ありがとうございました。
「いいね!」 1