投稿者:ヘイホーの叫び
投稿日:2022/7/18
ジャンル:
技術・機構
環境:通常
情報番号:8
構文
/execute
as <target>
at @s
positioned 0.0 0.0 0.0
positioned ^ ^ ^-2
positioned ★
positioned ^ ^ ^1
facing 0.0 0.0 0.0
positioned as @s
run
<command>
★の部分について
反転したい軸方向の値: 0.0
反転しない軸方向の値: ~
とする
簡易版
①y軸に関する反転
/execute
as <target>
at @s
rotated ~180 ~
positioned ^ ^ ^1
facing entity @s feet
run
<command>
②xz軸に関する反転
/execute
as <target>
at @s
rotated ~180 ~
run
<command>
③xyz軸に関する反転
/execute
as <target>
at @s
facing ^ ^ ^-1
run
<command>
説明
あるエンティティ<target>の視線方向に対し、任意の軸成分を反転させた方向を実行方向とします
絶対座標において、0.0と0は異なるため注意が必要です
原理
表現
座標、方向をベクトルで表現します
ベクトルvのx軸成分をv.xと表現します。y,zも同様です
定義
x軸に関する反転とは、ある方向vに対し、(-v.x,v.y,v.z)を求める、つまりx成分を反転させることです。y,zについても同様に定めます
xz軸に関する反転は(-v.x,v.y,-v.z)、xyz軸に関する反転は(-v.x,-v.y,-v.z)のように、各軸成分を反転させることを指します
主要部
/execute
①as <target> at @s positioned 0.0 0.0 0.0
②positioned ^ ^ ^-2
③positioned ★ (反転する軸: 0.0 反転しない軸: ~)
④positioned ^ ^ ^1
⑤facing 0.0 0.0 0.0
⑥positioned as @s
<target>の視線方向をv、目的の方向を(a*v.x, b*v.y, c*v.z)とします
ここで、a,b,cはそれぞれの軸を反転させるかどうかを±1で表現します。つまり、+1はそのまま、-1は反転です
①によって実行者を<target>とし、実行方向をv、座標を原点に設定します
②~④について、x軸に着目します
xが反転させる軸の時(a=-1)、②の操作後③で0.0に設定されるため、④のv.xのみが残ります
xが反転させない軸ではない時(a=1)、③は~で変化を与えません。よって、②+④=-v.xとなります
これらによって、④を終えた段階で実行座標のx成分は-a*v.xとなります
y,zも同様にして、-b*v.yと-c*v.zになります
⑤では実行座標(-a*v.x, -b*v.y, -c*v.z)から原点を向きます。これによって実行方向は(a*v.x, b*v.y, c*v.z)となり目的の方向を向きました
最後に⑥で実行座標を<target>に戻しています
特殊な場合
xyz軸に関する反転はfacing ^ ^ ^-1によって代替できます(rotated ~180~180もにた挙動を示します。ただしローカル座標の回転による仕様に注意が必要です)
実行座標から-vを向くことで逆向きになります
xz軸に関する反転はrotated ~180 ~によって代替できます
これはyrotを反転させています
y軸に関する反転は上2つの組み合わせで代替できます
xyzとxzを反転することで、xzの反転は打ち消されy軸反転のみになります
なお、a=b=c=1つまりすべての軸で反転しない(そのまま)操作はrotated ~~やfacing ^ ^ ^1で実現されますが、あまり意味がありません
具体例
すべてのプレイヤーの視線のz軸を反転させる
/execute as @a at @s positioned 0.0 0.0 0.0 positioned ^ ^ ^-2 positioned ~ ~ 0.0 positioned ^ ^ ^1 facing 0.0 0.0 0.0 positioned as @s run tp ~ ~ ~ ~ ~
最終更新:2024年12月22日 19:47