Amazon 初売り

« Effekseerの2Dエフェクトの描画順 | トップページ | Windows8でEffekseer本体を動かすにはDirectXのエンドユーザランタイムが必要なのね! »

2015.06.27

ゲームエフェクトとセーブに関する疑問

| |コメント (0)|トラックバック (0)

 このエントリーをはてなブックマークに追加

どこでもセーブできる系のアクションRPGの場合、
エフェクト再生中にセーブして
一度ゲームを終わらせて
セーブしたデータをロードした時、
エフェクトの再生状態はどうやって保持しているんだろう?

普通に考えると
エフェクトハンドルはゲーム起動のたびに変わるはずなので
エフェクトハンドルを保持することに意味はない気がする。

となるとエフェクトにIDをつけて、
エフェクトIDからロードしたエフェクトハンドルを
再度関連付けし直すんじゃないか?
というところまでは想像できた。

でも、再生途中のコマ数とかは、どこで持っているんだろう?

エフェクト再生ハンドルから現在のエフェクトの再生コマ数を取得したり
エフェクト再生時にどのコマから再生するか指定する
ってのがあれば、実現できそうな気がする。

だが、EffekseerForDXLib.hを見た感じだと
エフェクトを更新する関数はあっても、
現在どこまで再生しているかを取得するような関数は無さそうに思う。

ちなみに市販のエフェクトツールのBISHAMONは
どうなっているんだろう?
と思って以下のURLでAPIを確認したが、やはりそれらしいものは無い。

BishamonSDKDocument
Function
http://www.matchlock.co.jp/products/document/sdk_document/unity/group___d_l_l.html

キャンプメニューに入るとか一時的な中断なら
今のままでも問題無いと思っているんだけど
どこでもセーブできること考えると
フレーム数が長いエフェクトほど見た目上の問題が出る気がする。

例えば攻撃のエフェクトの場合、
エフェクト再生中にセーブして、そのデータをロードした時、
攻撃などのタイマーの都合で先に攻撃モーションが切れて
当たり判定が消失するのに
攻撃エフェクトだけ再生されるといったことがある気がする。

逆にロードした時にはエフェクトを再生しないといった場合
目に見えない当たり判定が残ることがありえる。

こういうのがあるから、
アクションゲームだとセーブポイント制が多いのかな?

Wikipediaのセーブポイントゲームによると
https://ja.wikipedia.org/wiki/%E3%82%BB%E3%83%BC%E3%83%96%E3%83%9D%E3%82%A4%E3%83%B3%E3%83%88_(%E3%82%B2%E3%83%BC%E3%83%A0)

プレイヤーの緊張感を高めるためやプログラム上の都合のため、セーブできる箇所を制限するものがある。
・どこでもセーブできると、挽回できない場面でセーブしてしまう場合がある。
・どこでもセーブできると、場当たり的にセーブしがちである。
 前項のほか貴重アイテムの消費などセーブ前にしてはいけないことについてプレイヤーに考えさせる。
・セーブポイントの設置によって、別のレベルの難易度調整を加えられる。
・再開時にセーブポイントまで大きく戻ることで、ゲームオーバーに避けるべき動機付けをする。
とある。

別にエフェクト再生が、とかは書いていない・・・

そもそも、なぜ初音ミク冒険記で、
いつでもどこでもセーブ方式にしたのか?

実は、かげさんがアクションゲームを
作ったことが無いから、というのが理由だったりする。

アクションゲームの場合だと特定の条件下でしか発生しない
不具合とかが多そうな気がしていて
その不具合が発生する条件の再現がしやすいようにしておきたい!
という思いがあったのだ。
(セーブポイント制だとそのマップまで移動しないといけないから
 デバッグ効率が悪いと思ったので)

実際、初音ミク冒険記では特定のマップでの当たり判定、
イベントフラグの組み合わせパターンの考慮漏れといった
特定条件でしか見つからない不具合も多々残っている。

原因がわからないものとかは、セーブデータとして残しておいて
何か解決の糸口を思いついたら対応するということをしている。

このため、障害チケットには
セーブデータ何番を使って再現テストするといった記載もしている。
追加のセーブ情報としてデバッグ用にセーブデータコメント機能を
つけたのもこの辺りの事情が関係している。

「いつでもどこでもセーブ」と「セーブポイント制」は
こう考えると一長一短に思う。

まぁ、セーブデータの方式の考察は、この記事の本題じゃないから
このくらいにしておこうか、
エフェクトの再生中にセーブしたデータをロードした時の話だ。

おそらく想像では、EffekseerのAPIの内部とかBISHAMONのAPIの内部では
エフェクト再生時のコマ数とかフレーム数は保持していると思う。

かげさんのマシンにインストールされていないBISHAMONは置いておくとして
Effekseerに再生中エフェクトのコマ数の取得や設定ができるか、
何かエフェクト再生状態のセーブ、ロード機能がアレば良いのだが・・・

これが気になったのは、
現在一時的に表示されるエフェクトでコマ数が絡みそうなのが
実は敵の消失エフェクトくらいしか無くて
しかも一時的に表示されるエフェクトはセーブデータに含めていない。

敵の消失なのでロード時にエフェクトが再生されなくても
問題無いと思っていたからだ。

クイックステップやバックステップ、クイックムーブなどは
移動キーを押している状態でないと発動しないので
ロードした直後にキーを押していなければ
解除されるから特に問題視していなかった。

ストライクショットやヒールでは、モーション中は硬直時間があるので
キャンプメニュー等の操作ができないから、コレも問題なかった。

エフェクト再生できるようになるなら、やっぱりセーブしたいんだが・・・

いつでもどこでもセーブにこだわらなければ
現在のリトライと同じくマップ入口スタートにしたり
セーブポイント制にして、
そもそもエフェクト情報をセーブしないようにする
という回避策もあるんだよなぁ・・・

うーむ。

2015/07/19追記
この記事を書いた後のEffekseerの製作者さんとのやりとり




 このエントリーをはてなブックマークに追加

| |コメント (0)|トラックバック (0)

このエントリーへのリンク

このエントリーのリンクを入れるHTML:

トラックバック

この記事へのトラックバックの一覧です: ゲームエフェクトとセーブに関する疑問:

コメント

このブログの新着コメントをRSSリーダに登録する為のxml




←名前とメールアドレスは必須です。
URLも記入すれば、URLのみが公開されます。
メールアドレスのみですと、メールアドレスが公開されてしまいますので、御注意ください。

↓コメント本文では、「a href」「b」「i」「br/」「p」「strong」「em」「ul」「ol」「li」「blockquote」「pre」のタグが使えます。絵文字をクリックすると、本文にタグを挿入できます。