この記事は Minecraft Command Advent Calendar 2023 20 日目の記事です。
はじめに
この記事ではマインクラフトのコマンドでSACLOS方式の誘導ミサイルを作ってみたことについて話していきます。
アルゴリズムおよび簡単なデモを紹介していきます。
SACLOSとは
半自動指令照準線一致(Semi-Automatic Command to Line of Sight, SACLOS)とはミサイルの誘導方式の一種です。
射手が照準器で示した方向に向かってミサイルが自動で方向修正をしていくという仕組みになります。
主に1970年ごろの対戦車ミサイルに使われていました。
参考:半自動指令照準線一致誘導方式(wikipedia)
アルゴリズム
上記説明だと難しそうに聞こえますが以下のように単純化して考えることができます。
- プレイヤーの視線方向より上(下)にミサイルがあったらミサイルを下(上)に曲げる
- プレイヤーの視線方向より右(左)にミサイルがあったらミサイルを左(右)に曲げる
この判定をマインクラフト内で行う場合以下のようなやり方で実現できます。
execute as @e[tag=missile] at @s facing entity @p[tag=sight] eyes positioned ^ ^ ^3 rotated as @p[tag=sight] positioned ^4 ^ ^ if entity @s[distance=..5] run tag @s add left
上記コマンドを使うと下図のような判定を行うことになり、対象エンティティが左にいるときだけtrueとなるようにできます。
ミサイルが自分より左にいる場合
ミサイルが自分より右にいる場合
右、上、下にいる場合を判定したい場合は同じ要領でpositioned ^4 ^ ^の部分を^-4 ^ ^、^ ^4 ^、^ ^-4 ^としていけば実現できます。
あとは判定結果に応じてTPコマンドでミサイルの進行方向を変えてあげれば完成となります。
デモ
実装してみた結果が以下になります。プレイヤーの見ている方向に向かってミサイルが飛んでいることが分かります。
https://twitter.com/uran2471/status/1723587254613123314
今のところ誘導するとプレイヤーの視線周辺を螺旋状に動いてしまっています。これはミサイルの旋回速度が状況によらず一定であることが原因ですので、その部分を修正していくことが今後の課題になるかと思います。
まとめ
マインクラフトでSACLOS方式の誘導ミサイルを作ってみました。課題はいくつかあるものの単純なアルゴリズムで誘導兵器なようなものを作ることができることが分かりました。