プレイヤーが落下せず、その場にとどまるようにしたい
[ver-1.21.1、Skript-2.9.3]
現在私は、バトロワで使用するためのスキルを作っています。
下記がそのスキルの動作(一部)になるのですが
1.プレイヤーがlevitationで、能力を使用した地点から高さ100mまで上がる。
2.100mまで上がったことを検知してlevitationをclearする
3.100m地点の場所に10秒間とどまり続ける
ここで、3番をteleportで実装すると
たしかに落下せずその場にとどまるようにはなるのですが、プレイヤーの視点が固定されてしまいます。
そこで、プレイヤーが落下せず、自由に視点を動かせる状態で、その場にとどまることができるようにするには、どんな方法があるのか教えて下さい。
また、よければteleport以外でプレイヤーの移動を制御する方法も教えてください。
長文ですみません、よろしくお願いします。
4 Replies
gravity をfalse にしてみるとか?
あ~でも前後左右は動けちゃうな
周りバリアブロックで囲えば?
だめ?
ちょっと思ったんだけど
たぶんPvPだろうし。下手にブロックで囲うと当たり判定のじゃまになりそうだよネって
とりあえずlevitationを削除した瞬間にプレイヤーのvelocityを0にして、その時点の座標を取得します
まず上方向の制御ですが、loop 200 timesで1tick毎に上方向に一定の強さでpushし続ければ重力を打ち消せると思います
横方向の制御については、取得した座標とプレイヤーの現在座標との差を取得し続けてその距離が一定以上(0.2blockとか)離れていたら、その座標同士のyawのみを取得してvectorを作り、pushを行えばいいとおもいます
上にpushが行われている間でも落下判定になり、プレイヤーの横移動速度は低下するため、微弱なpushで打ち消せると思います
ただしこの方法ではノックバックを受けたり別種の移動が介入した際に想定以上に移動させられたり、必要以上に左右に振られる問題が生じると思われるので、ダメージを受けたら即解除されるようにしたり、効果時間中はAttributeのノックバック体制を1にしたり、スキル発動中は他の移動アイテムを使えないようにするなどの工夫が必要になると思われます
簡単にまとめると重力を打ち消しつつ、常に中心の座標にプレイヤーを押し続けるということです