前提として
TopDownEngineのVer3.2(2023/7 現在)で以下のようにMagneticとObjectPoolerを含めたアイテムを作ります。その後、Loot(敵が落とすアイテム設定)を使って敵からドロップしたアイテムを再利用するとアクティブにならない事象が発生しています。
一瞬、アクティブになるのですが、すぐに非アクティブになるためプレイヤーがアイテムを取得することができません。(非アクティブになるので画面上にも現れません)
事象と原因、その対処方法
事象
MagneticにあるStateの”Copy State”にオブジェクトを設定するとCopy Stateで指定したオブジェクトと同じActive/非Activeに設定してくれます。今回で言うと”DropYellowCoinModel”を設定しています。
以下のように動くことを想定していました。
- MagneticのCopyStateに”DropYellowCoinModel”を設定してアイテムを取得してなくなると同時にMagneticも非活性にする(1.を実行しないと画面上にMagneticだけが残ってしまい処理が重たくなるから)
- Lootで”01_DropYellowCoin”を再利用するときにMagneticと”DropYellowCoinModel”が同時に活性化する
ただし、上にある動画で示したように一時的に活性化しますが、最終的には、Magnetic含めて、”01_DropYellowCoin”が活性化しない状態となっていました。
原因
一言でいうと、TopDownEngineの”Loot”スクリプトの仕様です。
“Loot”スクリプトの実装を見ると
Lootで生成したObjectを再利用する場合、「親オブジェクトのみを活性にする」
という仕様があります。Magnetic(親オブジェクト)のCopyStateに”DropYellowCoinModel”(子オブジェクト)を設定していると
- Lootを用いてアイテムを再利用する
- Magnetic(親オブジェクト)が活性、DropYellowCoinModel(子オブジェクト)が非活性になる
- Magnetic(親オブジェクト)が実行されるときにCopyStateを見に行って、DropYellowCoinModel(子オブジェクト)は非活性状態のままであるため、Magneticが非活性になる
といった順番で処理が行われるため、Magnetic(親オブジェクト)が一時的に活性になりますが、最終的に非活性になってしまい処理が終了します。
対処法
Lootスクリプトの中に
「Lootで生成したObjectを再利用する場合、親オブジェクトのみを活性にする」
という処理があるためこの処理を
「Lootで生成したObjectを再利用する場合、親オブジェクトのみを活性にする または Magneticの場合は子オブジェクトも活性にする」
という風に修正することでMagneticをLootで呼び出したとしても活性状態で再利用することができます。
# こういう場合ソースを載せるかどうか悩みましたが一旦、文章での表現とさせていただきます。
まとめ
今回はLootスクリプトの動きについて紹介しました。
TopDownEngineを触っていると、ときたま、あれっ?っといったことがあったりします。実装を見てみると自分の思った通りに動かないところがあったりするので直して自分のやりたいようにやれるカスタマイズ性は良いかなと思います。
コメント