既にベストアンサーが付いてますが個人的に面白そうだなと思ったので書き残してみます。
いわゆるザワールド状態は、一種のデバフ(状態異常)として処理すると実装しやすいかもしれません。毒や麻痺みたいに継続的に処理する必要があって、「条件によって付け外しする必要がある」という意味でも状態異常っぽい挙動ではないかなと思います。
つまり、ザワールド空間の効果範囲に入ったらキャラに対して「時間減速」の状態異常を付与する。効果範囲から出たら(or効果時間経過後に)外す、ということですね。
キャラクター側は「時間減速」状態異常の「付いた瞬間」「付いている間」「外された瞬間」のそれぞれで時間減速向けの処理を行っていけるとよさそうですね。
次に、実装の方法について少し考えてみましたが、Physics向けとしてTime.timescale
を変更してしまうと、全体に影響が及ぶから効果範囲外まで変わってしまってダメそうです。
可能ならば効果範囲内のキャラのみにグループ分けしてTimeScaleを別々に指定する、ということが出来ると良さそうですが、これも出来ないようですね。
- Unityの一時停止で止まるもの、止まらないもの【Time.timeScale】
https://tech.pjin.jp/blog/2016/12/20/unity_skill_7/
http://tsubakit1.hateblo.jp/entry/20140712/1405174180
となると、ザワールド中だけ移動を止める方法として以下のリンク先のrigidbody2D.isKinematic
を活用する方法ならありかな?と思いました。検証してないので確証はないですが…。
- Time.timescaleを変更せずにRigidbodyの一時停止&再開処理【Unity】【拡張メソッド】
https://gist.github.com/kankikuchi/251b0219a972b0692ce8
- 【Unity】RigidbodyのIsKinematic(物理演算の影響の有無)を変えて実験
https://ekulabo.com/rigidbody-is-kinematic
これなら「基本的にPhysicsベースで動かしつつ、ザワールド中だけキャラクター側のコードで位置などの更新を掛ける」ような形にできる可能性があるかなと思います。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/12/09 13:26
2019/12/10 00:28