wenni
1
AGMを使って横スクロールアクションゲームを作成している際、主人公が敵を攻撃した際に敵にヒットエフェクトを表示させるという課題に直面しています。当初は敵のスクリプトで「任意の状態→条件:攻撃を受けた→実行:エフェクトを表示→任意の状態に戻る」という構成にしようと考えていました。しかし、この方法だとエフェクトが発生した瞬間に敵の攻撃が中断され、敵の攻撃アニメーションが最初からやり直されてしまいます。その結果、主人公が連打しても敵が反撃できなくなってしまうという問題があります。
理想的なのは、敵が攻撃中の場合、ヒットしてもエフェクトは表示されるものの敵の攻撃は中断されず、いわば「硬直無効(バフ体)」のような状態にすることです。このように設定するには、どのようにすればよいでしょうか?
方法はいくつかあるのですが、一番柔軟なのは子ノードとしてもう一つオブジェクトを作ってしまうことだと思います。
攻撃の処理を親ノードで行い。
ダメージを受けた際の処理を子ノードオブジェクトで行うような形はどうでしょうか。
wenni
3
こんにちは。具体的な操作方法について詳しく教えていただけますか?敵ノードの下に新しいゲームオブジェクトを作成するということでしょうか?その場合、このゲームオブジェクトの設定はどのように行うのですか?詳しく教えていただければ幸いです。よろしくお願いいたします!
こちらの方法も2つあります。
一つは、以下のように、シーンの中に置くのと同様GameObjectの中にGameObjectを置いてしまう形です。

もう一つは、「オブジェクトを生成」アクションで子オブジェクトとして対象のオブジェクトを生成する方法です。こちらを使う場合は、子オブジェクトとなる側に「ChildSettings」を設定し、移動方法として「親オブジェクトから離れず追従」を指定してください。
いずれの場合も、コリジョンが干渉するとオブジェクト同士で反発してしまうので、干渉しないArea2DGameObjectを使うことをおすすめします。
そして、子オブジェクト側で、攻撃判定にあたったときにヒットエフェクトを出すようにすればいいでしょう。この子オブジェクトは、その他、親オブジェクト側の処理を中断せずに何らかの動作をさせたいときに使用できます。
wenni
5
おっしゃった方法で、ヒットエフェクトの実装が完了しました。ありがとうございます。しかし、新たな問題が発生しました。連続攻撃でヒットエフェクトが複数回表示された際、ゲームがクラッシュする確率が存在します。敵の死亡エフェクト再生時にも、同様にクラッシュする可能性があります。確率的に発生するため、イベントロジックの問題ではないと思われますし、エラーメッセージも表示されません。原因が特定できません。
エフェクトを表示になにか問題があるのかもしれませんね、可能であれば、プロジェクトを pgmmv-support@gotchagotcha.jpに送っていただくことはできますか?
wenni
7
こんにちは。プロジェクトファイルをメールで送信しました。敵に向かってCキーで攻撃すると、ゲームが落ちる確率があることが確認できます。
プロジェクトの共有をありがとうございます!
かっこいいゲームですね、ただ、残念ながら問題は確認できませんでした、ある程度環境の影響もあるのかもしれません。
しかし、エフェクトを表示アクションのコードを詳しく確認したところ、問題が起きうる部分があることはわかりました。
修正ができたら連絡します。そこで問題がおきるか試していただければと思います。
また、一つ気づいた点として、レンダラーが互換性になっています、Forward+にすると改善する、といったこともありうるかもしれません。
wenni
9
はい、別のPCでテストしましたが、今のところクラッシュの問題は見つかっていません。当面この件は放置して、開発を続けています。お手数をおかけしました!
こちらの問題につきまして、関連する可能性がある部分を修正したバージョンを本日配信しました、ご確認をいただければと思います。