移動中にブロックの側面にぶつかった判定方法

移動中にブロックの側面にぶつかった判定方法を知りたいです。 Purpur #2001 MC 1.20.1 Skript 2.7.0-beta3 『バニーホップ』が使えるSKを作っています。バニーホップとはダッシュ状態でジャンプし続けると通常より加速する現象を利用した移動方法です。 大枠はできたのですが、MCの場合、段差にぶつかって止まってしまうことが多いです。これを解消するために、ブロックの側面にぶつかったときに強制ジャンプをさせるような挙動にしたいです。 ブロックの側面にぶつかった判定の取り方がわかりません。ご存じの方は教えていただければ幸いです。 また、同様の挙動を実装する別の実装方法のアイデアなどありましたらご教授ください。 よろしくお願い致します。
4 Replies
月猫ch
月猫ch17mo ago
役に立つかはわかりませんが こちら、『走って板ガラスにぶつかったら勢いそのまま貫通する』skriptです ざっくり説明すると, while player is onlineで1 tick毎にplayerの位置を比べ、その差をvelocityとして保存し every 2 tickでplayerからvelocity分先にブロックがあるかどうか確認し そのブロックがガラスならvelocity x2 分tpして疑似貫通させる構造です https://discord.com/channels/545926404785569793/625599177895968768/1128620708642172928 要するに『playerのvelocity分先のlocationのblock』を取得すれば 疑似的にぶつかるブロックを取得できるってことです
unnnnnnnnnnn
unnnnnnnnnnn17mo ago
ブロックにぶつかったとき、velocityが0,0,0になることを使えるかも yは0.8だったかも
月猫ch
月猫ch17mo ago
yには常に重力(なぜか8)がかかる
ゆきあ
ゆきあOP17mo ago
お二方ありがとうございます。参考にしてやってみます・・・!! 直接壁にぶつかった判定って無いんですね。エリトラで壁にぶつかるとダメージ入るので似たような判定があるのかと思ってました。 set {loc.2.%player's uuid%} to location at player's head ~ {velocity.%player's uuid%} set {_block} to block at {loc.2.%player's uuid%} "%type of {_block}%" contains "grass_block" send "HIT!!" 判定部分を真似てコード書いてみているんですが、なかなかうまくいきませんね・・・ head削ったけどだめだな・・・ set {block.%player's uuid%} to block at location at player ~ {velocity.%player's uuid%} send "%type of {block.%player's uuid%}% HIT!!" 🤔 on player move: player has permission "bunnyhop.use" set {loc1.%player's uuid%} to player's location wait 1 tick set {velocity.%player's uuid%} to vector from {loc1.%player's uuid%} to player's location # normal length of {velocity.%player's uuid%} > 0 # player is not on ground set y component of {velocity.%player's uuid%} to 0 set {hitblock.%player's uuid%} to type of block at location at player ~ {velocity.%player's uuid%} {hitblock.%player's uuid%} is grass block send "%{hitblock.%player's uuid%}% HIT!!" なんとなく動くものができました。 set {loc1.%player's uuid%} to player's location wait 1 tick set {velocity.%player's uuid%} to vector from {loc1.%player's uuid%} to player's location normal length of {velocity.%player's uuid%} > 0 player is not on ground set y component of {velocity.%player's uuid%} to 0 set {hitblock.%player's uuid%} to type of block at location at player ~ {velocity.%player's uuid%} {hitblock.%player's uuid%} is not air {hitblock.%player's uuid%} is grass block とりあえず一段落するまでコードができました。ありがとうございました。
Want results from more Discord servers?
Add your server