妹でもわかるUnrealEngine4

毎日更新? 妹に説明するために書いてるけど、たまにわかってない場合もあるUnrealEngine4を中心としたゲーム制作の話。略すとイモリアル

毎日更新? 妹に説明するために書いてるけど、たまにわかってない場合もあるUnrealEngine4を中心としたゲーム制作の話。略すとイモリアル

OpenAssetOrgのアセットで2Dゲームを作る(18) KillZVolumeで消えない連中をどうにかする

f:id:una_unagi:20170116221229p:plain

「昨日UE4でテストプレイを開始したまま、すっかり忘れて違うことしてたんだけど、なんだか凄くゲームが重たくなっていた。なぜかと思って調べてみると、出てきた王様たちが全員消えずに行進を続けて、はるかかなたを目指して歩き続けてることが発覚した」

妹「ほったらかしにするから……」

「それはそうなんだけど、でもキルゾーンを設定してるわけだから、そこまで進んだ時点で消えてる予定だったんだよ」

imoue.hatenablog.com

「ただ、これ設置した時に、矢が消えるのは確認したんだけど、王様の方は確認してなかった。でもそのままだと消えないらしいことがわかってきた」

キルゾーン(KillZVolume)の自動削除が働くための条件

(1)キルゾーンとアクターのコリジョンがオーバーラップする
(2)アクター側が次のいずれかの条件を満たしている
 ・アクターにMovementComponentのサブクラスがくっついている
 ・アクターのコリジョンの設定で ShouldUpdatePhysicsVolume にチェックが入っている

「問題は(2)の部分で、矢の方にはProjectileMovementがくっついてたから、それでキルゾーンの条件を満たしてた。ところが王様の方はActorComponentを継承した自作クラスで動いてる。MovementComponentはブループリントからではサブクラスが作れないから」

妹「敵もMovementComponentで動いてれば問題なかったと」

「そのコンポーネントで動いてない場合でも、意味のないMovementComponentがくっついてるだけでキルゾーンは作動する。設定全部オフにして移動量ゼロにしてもいいし、クルクル回るだけでのRotatingMovementでもいい」

f:id:una_unagi:20170116222828p:plain

「だからといって意味のないComponentつけるのも変なので、ソースコードを調べてみたところ、このShouldUpdatePhysicsVolumeの設定がキルゾーン判定に関係してることがわかった。一見関係なさそうに見えるけど、KillZVolumeはPhysicsVolumeのサブクラスなのでだいぶ関係ある」

妹「ここってPhysicsの設定欄みたいだけど、物理はオフなんだよね?」

SimuratePhysicsにはチェックしなくていい。Physicsの下の方で折りたたんでるところを開いて、ShouldUpdatePhysicsVolumeにだけチェックすれば問題解決」