vectorについて

コード
command /testvector:
trigger:
loop all entities:
loop-entity is armor stand
loop-entity's name is "test"
set {_v} to loop-entity
set {_v2} to vector from player's head to {_v}'s head
set player's velocity to {_v2}
command /testvector:
trigger:
loop all entities:
loop-entity is armor stand
loop-entity's name is "test"
set {_v} to loop-entity
set {_v2} to vector from player's head to {_v}'s head
set player's velocity to {_v2}
Vectorについてよくわかりません。 やりたいことは、commandを実行したプレイヤーの視点をtestという名前のアーマースタンドのほうにむけたいです。 この投稿を参考にしました。(ほぼ同じ) https://discord.com/channels/545926404785569793/1072066341617541211 Vectorについて調べてみたんですけどあまりわからなかったです。 認識こんな感じなんですけどあってますか..?
11 Replies
ぐううううう
認識があってたらこのvectorからyaw,pitchを取得する方法を教えてください。 ちなみに今のコードのままだと大体のアマスタの方向に吹っ飛んでいきます。
何か
何か16mo ago
まずyawはプレイヤーとアマスタを上から見た時の
何か
何か16mo ago
何か
何か16mo ago
この角度のことで この角度を求めるために逆関数atanを使います atanでなくても 水色の部分はxzの長さなので asinやacosでも求まるはずです 次にpitchは 横から見た時のこの角度のことで
何か
何か16mo ago
何か
何か16mo ago
これはvectorの長さとyを使ってasinで求められます xzの長さを使えばatanでも求められます wikivgのprotocolにものってます
何か
何か16mo ago
何か
何か16mo ago
そしてskriptではこの計算をしなくても vector yaw of vector pitch of という構文があります
ぐううううう
command /testvector:
trigger:
loop all entities:
loop-entity is armor stand
loop-entity's name is "test"
set {_v} to loop-entity
set {_v2} to vector from {_v}'s head to player's head
set {_l} to {_v}'s location
set {_l}'s yaw to vector yaw of {_v2}
teleport {_v} to {_l}
command /testvector:
trigger:
loop all entities:
loop-entity is armor stand
loop-entity's name is "test"
set {_v} to loop-entity
set {_v2} to vector from {_v}'s head to player's head
set {_l} to {_v}'s location
set {_l}'s yaw to vector yaw of {_v2}
teleport {_v} to {_l}
計算はとても難しかったのでvector yaw ofの構文を使ってやりました。 アマスタの視点をプレイヤー方向に動かせるようになりました。 わかりやすい説明、ありがとうございます!
tanoKun
tanoKun16mo ago
//ベクトルからyaw, pitchへ
double length = Math.sqrt(vector.getZ() * vector.getZ() + vector.getY() * vector.getY() + vector.getX() * vector.getX());
double pitch = -Math.asin(vector.getY() / length) / Math.PI * 180;
double yaw = -Math.atan2(vector.getX(), vector.getZ()) / Math.PI * 180;
yaw = yaw < 0 ? 360 + yaw : yaw;

//yaw, pitchからベクトルへ
x = -Math.cos(pitch) * Math.sin(yaw);
y = -Math.sin(pitch);
z = Math.cos(pitch) * Math.cos(yaw);
Vector vector = new Vector(x, y, z);
//ベクトルからyaw, pitchへ
double length = Math.sqrt(vector.getZ() * vector.getZ() + vector.getY() * vector.getY() + vector.getX() * vector.getX());
double pitch = -Math.asin(vector.getY() / length) / Math.PI * 180;
double yaw = -Math.atan2(vector.getX(), vector.getZ()) / Math.PI * 180;
yaw = yaw < 0 ? 360 + yaw : yaw;

//yaw, pitchからベクトルへ
x = -Math.cos(pitch) * Math.sin(yaw);
y = -Math.sin(pitch);
z = Math.cos(pitch) * Math.cos(yaw);
Vector vector = new Vector(x, y, z);
こんなコードあったよ @nannka 任せた
Want results from more Discord servers?
Add your server
More Posts
チェストの中のアイテムを消したい投げやりNBT質問Skript 2.6.4 SkBee 2.5.4 ``` command /nbt: permission: op permission message: "権限がないにゃ~" 手に持ってるシュルカーをシフト右クリックして開きたい調べてできる範囲で書きましたが思ってるように機能しませんでした(エラーも出ませんでした) ```on rightclick holding shulker box: player is sneスケルトンのエリート化(矢のAIM改善)スケルトンの矢のAIMを改善するべく、奮闘しております やってみたこと: skeletonとtargetのheadの座標からvectorを作り、arrowのpitchとyawを書き換え コード: ``inventory click を cancel event していてもすり抜けるシフト+クリックと同時にGUIを閉じるとGUI内のアイテムが入手出来てしまうのですが、対策できますか?team packetのmode fieldをskript-reflectで記述したときにうまく動かないMinecraft 1.12.2 (非PR) skript 2.5.3 skript-refrect 2.2.3 ProtocolLib 4.8.0 その他: SkQuery 3.6.4 SkBee リロードしたときのメッセージを変更する方法[Skript] Reloading all scripts... Line 11: ~~~~~~ (○○.sk) みたいなメッセージを変えるのって出来ますか?sneak toggleの着火ラグ``` on sneak toggle: player is not sneaking``` これでしゃがんだ時ってのを感知するはずなんですけど 着火するのがしゃがんでから1tickあとなんで2チームに分かれ、片方のチームメンバーの全滅を待つskすいません、どんなタイトルにすればいいかわかりませんでした.. こんな感じのものを書きました(on death、on respawnのところはredのバージョンもありますが、変数名しか変わっていなかon damage: cancel eventの時もkillはできるようにする方法``` on damage: cancel event ``` があると、/killも無効化してしまいます cancel eventを残したまま/killできるようにする方法はありますか?