いつもお世話になります。
掲題の件、質問があります。
本当に初歩的な質問となりますが、
下記のような事を行いたいと考えております。
- ゲーム中、ホーミングミサイル(横長の楕円形のモデルデータ)を発射する。
- 1.で発射したミサイルが動く敵オブジェクトにホーミングする。
- ミサイルが敵オブジェクトに当たったら(ミサイルのHitEventで判定)、FireImpulseを行い敵オブジェクトや周りのスタティックメッシュ含め吹き飛ばす。
- 1.で発射したミサイルをDestroyActorを使用して削除する。
簡潔な質問を行うと上記仕組みを作る方法 又は サンプルがあればご教示いただきたいのです。
【詳細をお話ししますと下記のようになります。】
上記のような事がしたい為、ホーミングミサイル、敵オブジェクト共にActorを親クラスとした
ブループリントクラスを作ったのですが、下記のような状況となっております。
[状況・ホーミングミサイル]
- ホーミングミサイルはスタティックメッシュ(SM_Chair)などのスタートアップコンテンツとも当たり判定を行いたい。
- スタティックメッシュとのあたり判定時にHitEventを発生させる為にミサイルのルートコンポーネントをCollisionにしている。
- ルートコンポーネントをCollisionにしているが、Rootオブジェクトは回転、移動が出来ない為、大きさ0のダミーコリジョン(NoCollision)となっている。
- ホーミングミサイルは横長の為、ミサイルに最も適した形に回転移動拡縮させたCapsuleCollisionをもう一つ追加し、BlockALLとしている。
- ホーミングミサイルは敵やスタティックメッシュと当たった際に吹き飛ばす演出を入れたいので、FireImpulseでメッシュを吹き飛ばしている。
- ホーミングミサイルは敵のルートコンポーネントに向かって誘導するようになっている。
- MeshはNoCollision+NoSimulatePhysicsに指定。
[状況・敵オブジェクト]
- 敵オブジェクトもスタティックメッシュなどのスタートアップコンテンツとも当たり判定を行いたい為、ルートコンポーネントにサイズ0のCollisionを指定している。
- 敵オブジェクトも特殊な形をしている為、適したCollisionを別に設定しており、こちらはSimulatePhysics+BlockALLを指定している。
- ルートコンポーネントのCollisionにSimulatePhysics+BlockALLを指定すると、2.のコリジョンとぶつかっておかしな挙動となるので、ルートコンポーネントのCollisionはNoCollision+SimulatePhysicsをOFFにしている。
- 3.の理由からMeshはNoCollision+NoSimulatePhysicsに指定。
上記のような作りなのですが、下記のような問題点や疑問点が発生しています。
[問題点/疑問点]
- そもそもルートオブジェクトがCollisionじゃないとスタティックメッシュと当たり判定(HitEvent)が出来ないのか?
=> よりベターにHitEventを発生させる方法はないのでしょうか? - 敵オブジェクトのルートコンポーネント配下のコリジョン以下に物理演算が適用される為、ルートコンポーネントは移動しない。
=> そのため、ルートコンポーネントと実際のメッシュの位置がバラバラになる。
=> ホーミングミサイルは敵オブジェクトのルートコンポーネントを狙うが、その位置にメッシュは存在しない。
=> この問題点がなんとかならないか。 - FireImpulseで敵オブジェクトやその他スタティックメッシュを吹き飛ばしているが、
敵オブジェクトコンポーネント内で、メッシュの相対位置だけがずれる為、ホーミングミサイルが正しい位置にホーミングしない。
[コンポーネント構成]
長文な上、非常に拙い質問となってしまい大変申し訳ございませんが、
この問題点を打開するベターな方法があればご教示いただきたいです。
何卒ご教示の程よろしくお願いいたします。