DestroyComponentの注意点!~なぜDestroyComponentを使ってるのに何も破壊されないのか??~
今回DestroyComponentで躓いた点があったので紹介する。
前回の記事とほぼ同じな為、ある程度説明を省く。
「落ちてる武器を拾って、プレイヤーにアタッチする」という処理なのだが、
落ちてる武器を拾った時
↓
落ちてる武器と同じ武器をプレイヤーの指定したソケットにスポーン
↓
スポーンした武器を、プレイヤーの指定したソケットにアタッチ
↓
落ちてた武器を破壊(削除)
といった処理だ。
~処理~
武器を取得時、指定したソケットに武器をスポーン。
取得した武器のSphereコリジョンを破壊。落ちてた武器を破壊。
※変数「Rifle」と「WeaponMaster」と「Sphere」については先に載せた記事を参考ください。
これでプレイすると・・・
落ちてる武器は破壊されたものの、背中にアタッチされた武器はSphereコリジョンが残ったまま。
先程の画像の処理で確かにRifle(武器)に、コンポーネントとして追加してあるSphereコリジョン(オーバーラップコリジョンコンポーネント)を、破壊(Destroy)したはずなのに。
実はこの処理だと破壊されないのだ。
どういう事かと言うと・・・
DestroyComponent・・・そのアクター自身のコンポーネントを破壊するノード。
ここで言うアクター自身というのは、「操作キャラ」、つまり「サードパーソンキャラ」の事になる。
このサードパーソンキャラのコンポーネントには、Sphereコリジョンなんてものは存在しない。
「え??でもAttachtoComponentでRifle追加してるんでしょ??それで追加したRifleのコンポーネントにSphereコリジョンがあるんだから、普通に存在してるんじゃねえの??」と思うかもだが。それは違う。
AttachtoComponentは、ただ単に「キャラに追従させてる」だけ。もっと簡単な言い方をすれば「くっつけてる」だけ。
だから、「コンポーネントに追加」してるわけではないのだ。
つまり、DestroyComponentでサードパーソンキャラのSphereコリジョンコンポーネントを破壊しようとした所で、そもそもサードパーソンキャラにSphereコリジョンコンポーネントなんてものは無いから、何も変化が無かったのだ。
じゃあどうすればいいか??
WeaponMasterのイベントグラフに、Sphereコリジョンを破壊する為のカスタムイベントを追加すればいいのだ。
「DestroyComponent」という名のカスタムイベントを追加。(名前が一緒でややこしいかもだがw)
武器をアタッチさせた後に、「DestroyComponent」カスタムイベントを呼び出す。
これでプレイしてみよう!
武器を拾った後、アタッチされた武器のコンポーネントであるSphereコリジョンがしっかり破壊されていた!
今回はDestroyComponentの躓きポイントを紹介した。
もし同じようなことで悩んでいるならこの記事を読んでほしい。
それではまた!^^ノシ