CSPのトレイルをskriptで作りたい
CS,CSPをskriptで再現したいのですが、CSPのtrailは「~ブロックごと」というのがあります。
矢をかなりの速度で飛ばすため、Skriptの「1tickごと」だとかなりの間隔が空いてしまいます。
これを解決できるサンプルコード、もしくは「~m動いた」などを検知する方法は、ありますでしょうか?
バージョンは1.16.5,1.15.2のどちらかでお願いします。
17 Replies
Ver1.12.2に生息しているものです
雪玉発射を検知し、発射した時から
while projectile alive:
で、毎tick 雪玉のvelocityを取得
取得したvelocityから指定の長さのvector(ここの長さが trailの間隔)を作成し、雪玉のlocationからvectorずつ伸ばして
その場所にエフェクト表示
で実装してます
Verは違いますが 基礎構造は似た感じでできるのでは
※書いてて思ったのですが、vectorの長さをx(-1)して trailを描画する方向を後ろにしたら、ビジュアル的にも正しい表示になると思います雪玉とかの発射物は飛ぶ方向と視点(F3+Bの青い線)との方向が違うんですよね…
青い線に沿ってパーティクルが出るので難しいと思います
雪玉を起点にするとのことなので問題ないかと
なるほどです、勘違い申し訳ないです
これに関しては、一定速度以上の雪玉等の描画がバグるだけで、内部処理的には問題ないです
なので仮に飛んでいる雪玉の位置にパーティクルを表示した場合、正しく表示されます
あ何でもなかった
プレイヤーの視点ではなく、雪玉の視点(F3+Bの雪玉から出ている青い線)です。わかりにくかったですね…
玉が矢だともっと玉の視点が複雑化します
ところで問題の解決方法ですが、1tick毎に座標取得をするのは変えずに
取得するたびに前回取得した座標との間のブロックをloopし、そこに描画するのはどうでしょう
ブロックの中心に描画されてしまいませんか?
なるほど
じゃあ前回の雪玉の座標から取得した雪玉の座標までのベクトル取るほうがいいのか
1は座標一個めで2は座標二個めです
この赤い線をピンポイントでループできれば取れると思いますが…
この1→2のベクトルはどのように取得するんです?
そもそもminecraftそのものが1tick毎にゲームの状態を更新してます
Skript Hub - Documentation
Vectors - Vector Between Locations (Expression) - Skript
Creates a vector between two locations.
1 tick毎に物体の速度を計算して次の座標を出して前の座標との間をレイトレースして障害物判定をします
vector from (元の座標) to (行先の座標)
そもそもこれは全ゲーム共通です🙄
更新の頻度はゲームによるけど
skriptの1tickは遅すぎるわけでも速すぎるわけでもなく
every 1 tickっていうのはマイクラのupdateすべてにおいて処理をするってことになるので
まったく問題ありません
説明ありがとうございます。あまりマイクラのシステム的な仕様自体も理解が追いついてない状況なので助かります.