この記事では、Minecraft Java Edition(バージョン1.20.4)の情報をもとに執筆しています。
そのほかのバージョンや機種などでの動作は保証できません。
こんにちは!
マインクラフターのなつめ(@natsume_717b)です。
この記事では、こんな疑問を解決します!
- Motionはエンティティが保持している移動速度
- Motionを指示することで移動させられる
Motionとはエンティティが持つデータの1つです。
これは移動に関する項目で、エンティティの移動を指示することができる項目でもあります。
実際にやってみた様子がこちら。
Motionを指示して雪玉で遊んでみました
— 夏メ│Natsume (@natsume_717b) December 21, 2023
たまたま作成&導入していたデータパックのおかげで多少見やすいはず pic.twitter.com/unK6fpyLMg
プレイヤーのデータは編集できないため、プレイヤー以外のエンティティを対象にすることになりますが、便利なのでぜひ覚えてくださいね。
それでは見ていきましょう!
Motionはエンティティが保持している移動速度
Motionとは一部のエンティティが保持している、データ取得時の現在速度になります。
時速3㎞で歩いている人がいれば、その人のMotionは3㎞といった感じですね。
速度を上げて時速4㎞になれば、Motionも時速4㎞となります。
実際はXYZの座標ごとに値が分かれているほか、単位は当然㎞ではありません。
あくまでも例えです。
Motionの値を確認するには、dataコマンドを使います。
試しに防具立てを設置して、以下のコマンドを実行してみましょう。
/data get entity @e[type=minecraft:armor_stand,limit=1] Motion
すると以下に似た結果が得られるはずです。
防具立ては以下のエンティティデータを持っています : [0.0d,-0.0784000015258789d,0.0d]
棒立ちしている防具立ては、XYZ全て0に近い数字を保持しています。
要するに動いていないわけですね。
次の項目では、Motionに値を指示してエンティティの移動に役立ててみます。
Motionを指示することで移動させられる
Motionの値を指示することで、エンティティがその値通りに動き出します。
イメージとしては、「移動中の速度情報を付与した、上書きした」といった感じですね。
結果として、対象となったエンティティは与えられた速度情報通りに移動せざるを得ません。
実際のコマンドで行ってみる場合は以下の通り。
(防具立てを対象としています)
/data merge entity @e[type=minecraft:armor_stand,limit=1] {Motion:[0.0d,2.0d,0.0d]}
このコマンドを実行すると、1つのアーマースタンドが上方向へ飛び、しばらくすると重力に従って落下してきます。
このような挙動をする理由は、Motionの2つ目の項目に2.0という正数が与えられているからです。
1つ目の値を指示すればX座標、2つ目の場合はY座標、残る3つ目の場合ならばZ座標を指示することとなります。
また、+の値を指示すれば各座標のプラス方向に向かい、負の数を指示すればマイナスの方向へ向かいます。
そのため、エンティティの向きは関係なく、座標だけを参照します。
複数のエンティティに指示したい場合
複数のエンティティに対して、1度のコマンドでMotionを指示したい場合はexecuteコマンドのasを使います。
具体的には以下の通りですね。
/execute as @e[type=minecraft:armor_stand] run data merge entity @s {Motion:[0.0d,2.0d,0.0d]}
難しいことはなく、asで対象としたい複数のエンティティを指示しdataコマンドでは@sを使います。
これでdataコマンドの実行者がasで指示したものと同義になります。
まとめ
というわけで、今回のまとめです。
- Motionとは、そのエンティティが持っている現在速度のこと。
- Motionを指示することで、エンティティの移動に役立てることができる。
この記事は以上になります。
2016年からマイクラを楽しんでおり、最近はクリエイティブモードでコマンドを駆使して遊んでいます!