playanimation tempと応用
1.temp変数とは、variableとの違い
temp変数とはクライアント側で保存される一時変数のこと
variableはクライアント側のエンティティに保存されるが、
tempはエンティティに保存されるわけではない
どこで保存されているかは不明
2.tempの利用
tempはクライアント側に保存される変数なので、基本的にmolang(マイクラ用の言語のこと。例:return q.is_sneaking;)が使える場所ではどこでもtempを使うことができる(はず
tempを使う時はtemp.<変数名:文字列>のように書き、値の変更などはvariableと同じように動作する。
ただ、temp.asd.fghのように二重構造(?)、オブジェクト形式では扱えない
3.temp、その他諸々の挙動
playanimationにおける変数の変更は、画面内にいるエンティティにしか適応はされない
例えば、自分の背後にいるエンティティの
variable.testを1にしたとしても、描画されてない場合は適応されない
そのため、variableを使って何かをする場合、一時的なものでないなら常時実行でvariableを設定する必要があります
これはtempでも同じなので、注意が必要です
/playanimation @e attack.positions none 1 “temp.test=temp.test+1??0;”のように、複数エンティティに対してtempを使用する場合、内部idが低い順で実行される可能性がある
4.tempの応用
tempを使うことで、あるエンティティのデータを別のエンティティに渡すことができます
code:_
/playanimation @p attack.positions none 1 "
temp.from_x=q.position(0);
temp.from_y=q.position(1);
temp.from_z=q.position(2);
" temp
/playanimation @etype=armor_stand animation.ender_dragon.neck_head_movement none 1 "
v.delta_x=((temp.from_x??0)-q.position(0))*16;
v.delta_y=((temp.from_y??0)-q.position(1))*16-50;
v.delta_z=-((temp.from_z??0)-q.position(2))*16;
v.head_rotation_x=0;
v.head_rotation_y=0;
v.head_rotation_z=0;
v.head_position_x=v.delta_x;
v.head_position_y=v.delta_y;
v.head_position_z=v.delta_z;
" temp
上記のコマンドは、プレイヤーの位置データをアマスタに渡し、頭部をプレイヤーの位置に移動させるコマンドです
ただ、この場合、1人のプレイヤーのデータしか渡せません
そこで、q.is_local_playerを使用します
code:_
/playanimation @p attack.positions none 1 "
(q.is_local_player)?{
temp.from_x=q.position(0);
temp.from_y=q.position(1);
temp.from_z=q.position(2);
};
" temp
q.is_local_playerは、クエリの対象が操作している自分自身の場合に1を返すものです
なので、temp.from_<軸>にはクライアントそれぞれに対応するものが入ります
この技術を使ったのが⁠
https://scrapbox.io/files/67ae0132deb7ed6b3f51a337.mp4
これを軽く説明
アマスタとプレイヤーにはそれぞれv.showing_idが割り当てられています
temp.showing_idにクライアントそれぞれのv.showing_idが入ることで、クライアントごとにどのアマスタを表示させるかを決めている
ということです
code:_
(q.is_local_player)?{
t.data=<入れたいプレイヤーのデータなど>
};
このテンプレで、クライアントごとにデータを渡せます
他エンティティがそれを取得するには、t.dataだけで取得できます
取り合えず書き溜めを解放した
ぼちぼちではないかも()