CorgiEngineメモ#12

ゴールしたらキャラの動きを止めたい

画像1

現状、FinishLevelのActivateが働いてステージクリア扱いになっても、プレイヤーや敵は動き回れるし、なんなら衝突判定働いてプレイヤー死ぬというカオス状態に陥ってしまう。これはどげんかせんといかん。

画像2

色々それっぽいメソッドを漁ってると、LevelManagerにFreezeCharactersとかいうのがあったので、OnActivationのタイミングで呼び出してみる。

そしたら、プレイヤーの動きは止まるけれども敵キャラは動き回るという半端な状態に。わざわざ複数形で書いてるからそこも適用されてほしかったのだが・・・敵キャラがエンジンの管理下にうまく置けていないのか、そもそもそういうもんなのか、俺にはよく分からなかった。

画像3

ちなみに、こんな感じで敵キャラのCharacter.Freeze()を個別に呼び出せば止まる。しかし、ステージに存在するキャラごとにチマチマやるのは面倒だなぁ。

いつものゴリ押し解決

画像4

エンジンの仕組みがよく分からん以上、いつものゴリ押しで行くしかなかろうもん。

俺はBOLTを使ってるので、OnActivationのタイミングで、StateMachineに対してTriggerUnityEventで任意のイベントを発行してやる。Activatedとかでもしておこうか。

画像5

BOLT側ではActivateイベントを拾ったら、EnemyとPlayerのタグを持つ某を混ぜ混ぜして、その全てに対してCharacter.Freeze()を呼び出してやる。

結果

画像6

お望み通り、全キャラクターが止まるようになった。よきよき。

この記事が気に入ったらサポートをしてみませんか?