OpenAssetOrgのアセットで2Dゲームを作る(18) KillZVolumeで消えない連中をどうにかする
「昨日UE4でテストプレイを開始したまま、すっかり忘れて違うことしてたんだけど、なんだか凄くゲームが重たくなっていた。なぜかと思って調べてみると、出てきた王様たちが全員消えずに行進を続けて、はるかかなたを目指して歩き続けてることが発覚した」
妹「ほったらかしにするから……」
「それはそうなんだけど、でもキルゾーンを設定してるわけだから、そこまで進んだ時点で消えてる予定だったんだよ」
「ただ、これ設置した時に、矢が消えるのは確認したんだけど、王様の方は確認してなかった。でもそのままだと消えないらしいことがわかってきた」
キルゾーン(KillZVolume)の自動削除が働くための条件
(1)キルゾーンとアクターのコリジョンがオーバーラップする
(2)アクター側が次のいずれかの条件を満たしている
・アクターにMovementComponentのサブクラスがくっついている
・アクターのコリジョンの設定で ShouldUpdatePhysicsVolume にチェックが入っている
「問題は(2)の部分で、矢の方にはProjectileMovementがくっついてたから、それでキルゾーンの条件を満たしてた。ところが王様の方はActorComponentを継承した自作クラスで動いてる。MovementComponentはブループリントからではサブクラスが作れないから」
妹「敵もMovementComponentで動いてれば問題なかったと」
「そのコンポーネントで動いてない場合でも、意味のないMovementComponentがくっついてるだけでキルゾーンは作動する。設定全部オフにして移動量ゼロにしてもいいし、クルクル回るだけでのRotatingMovementでもいい」
「だからといって意味のないComponentつけるのも変なので、ソースコードを調べてみたところ、このShouldUpdatePhysicsVolumeの設定がキルゾーン判定に関係してることがわかった。一見関係なさそうに見えるけど、KillZVolumeはPhysicsVolumeのサブクラスなのでだいぶ関係ある」
妹「ここってPhysicsの設定欄みたいだけど、物理はオフなんだよね?」
「SimuratePhysicsにはチェックしなくていい。Physicsの下の方で折りたたんでるところを開いて、ShouldUpdatePhysicsVolumeにだけチェックすれば問題解決」