猫とゲームエンジン

今日も猫に面倒みられながら生きてる

Unity : TopDownEngine : キャラクターの移動速度をスクリプトから変更

ForceAbilitiesInitialization

今回はwalkの値を変更 変更自体は普通にできるけど値を変えただけだとすぐに実際に移動速度には反映されず、 ForceAbilitiesInitialization を呼び出すと反映された。

あんま調べれてないのでベストプラクティスではないかも。 とりあえず変わる。

_character = _collidingObject.GetComponent<Character>();
CharacterMovement _movement = _character.FindAbility<CharacterMovement>();
_movement.WalkSpeed += 8f;
_character.ForceAbilitiesInitialization();

topdown-engine-docs.moremountains.com

topdown-engine-docs.moremountains.com

ForceAbilitiesInitializationのPreview

SetContextSpeedMultiplier

SetContextSpeedMultiplierを呼び出すとスピードに関わる内部の倍率?が変わるようで runコンポーネントを設定している場合はwalk、run両方の値が変わった。 しかもInitializationを呼び出さなくてもすぐ反映される。

ただし CharacterPersistanceで次のシーンに持っていけない数値のようだったので 特定の条件による一時的な加速減速などを扱うための関数かも。

float currentContextSpeedMultiplier = _movement.ContextSpeedMultiplier;
_movement.SetContextSpeedMultiplier(currentContextSpeedMultiplier + 0.25);

いずれにせよ、永続的なパワーアップアイテムはcomponentの数値が変わるようなものの方が適切かな。