マルチプレイなら『シン・VPS』がおすすめ!

監視カメラをコマンドだけで作る!1から解説します【Java版】

監視カメラをコマンドだけで作る!1から解説します【Java版】

この記事では、Minecraft Java Edition(バージョン1.17.1)の情報をもとに執筆しています。
そのほかのバージョンや機種などでの動作は保証できません。

監視カメラを作りたいマインクラフター
「コマンドを使って、監視カメラを作りたい……。どうやったら作れるかな?」

こんな疑問を解決します!

本記事の内容
  • 監視カメラのコマンドを組む大まかな流れ
    • scoreboardを作成する
    • 透明な防具立てを召喚する
    • 監視カメラの視点にするためのコマンド
    • 監視カメラの視点を解除するコマンド

こんにちは! マインクラフターのナツメ(@natsume_717b)です。

普段は脱出マップを配布・制作しています!
→配布マップ・ダウンロードページ

今回はコマンドを駆使して、監視カメラを作っていきます!

Mod等は使用せずにコマンドだけで動作するようにしましたので、Modは入れたくないという方でも作ることができますよ!

この記事では、はじめに大まかな流れを確認して、流れを理解したら実際のコマンドを記載しつつ解説していきます。

記事通りにコマンドを打っていけば、監視カメラが作れるようになりますよ。

というわけで、さっそく見ていきましょう!



監視カメラのコマンドを組む大まかな流れ

まずは監視カメラを作るのに、大まかな流れから説明していきます。
というのも、この流れを理解しておかないと途中で訳が分からなくなるだろうと思ったからです。

なので、「本記事の内容」で紹介はしていますが、今一度それぞれの項目のざっくりとした解説を含めて監視カメラを作る手順を説明していきます。

というわけで、大まかな流れは以下の通りです。

  1. scoreboardの作成
  2. 防具立ての召喚
  3. 監視カメラを見るためのコマンド
  4. 元の視点に戻るためのコマンド

scoreboardを作成する理由は、監視カメラの視点から元の視点に戻るために利用します。

今回はしゃがんだことを感知して、元の視点に戻るようにします。

防具立ては監視カメラの視点となります。
なので、監視したい場所に設置しましょう。

後述しますが、防具立ては空中に浮かせておくこともできるのでどんな場所でも監視できますよ。

③と④のコマンドに関しては、tpコマンドやspactateコマンド等を使って視点を移動させます。
また、その際にscoreboardの値を変更したりするので、チェーンコマンドブロックなども使っていきます。

今回は複数のコマンドを使うので、いくつかのコマンドは自分が使いやすいコマンドに変更しても機能したりします。
ですが、コマンドに慣れていない、自信がないという方は、ひとまず説明通りにコマンドを組んでくださいね。

さて、なんとなく分かっていただけたでしょうか。
次の項目からは具体的なコマンドも交えて、監視カメラの作り方を解説していきます。

scoreboardを作成する

まずはscoreboardを作成しましょう。
前項でも解説しましたが、これは監視カメラの視点から元の地点に戻るために必要な、下準備となります。

そして、今回は監視カメラの視点の時にしゃがむ行動をしたらカメラの視点を解除するようにしたいと思います。
なので、「minecraft.custom:minecraft.sneak_time」を使って、しゃがんだ時間をスコアボードで計測するようにしましょう。

スコアボードを作成するコマンドは以下の通り。

scoreboard objectives add XXXX minecraft.custom:minecraft.sneak_time

XXXXの部分が作成するスコアボードの名前となります。
今回はXXXXにしましたが、英数字で指定すれば自分の好きな文字列で大丈夫です。

XXXXでない名前を付けた場合は、これから表記するコマンドのXXXXの部分は各自でつけた名前に変更してください。

透明な防具立てを召喚する

さて、スコアボードを作成出来たら防具立てを召喚しましょう。
防具立てはエンティティなので、summonコマンドを使って指定した位置に置くことができます。

その際、防具立てには透明になるようコマンドを打つほか、タグをつけます。

それぞれどういった意味があるのかというと

  • 透明にする理由
    監視しているところへ実際に訪れても防具立てが見えずに済む。景観を損なわない。
  • タグをつける理由
    複数の監視カメラを作る際、どの防具立ての視点になるのかをタグで判別できるようにしておくため。

となっています。
透明に関しては分かりやすいと思いますが、タグは少しイメージが湧きにくいかもしれませんね。

タグというのは、「持ち合わせている属性」です。
例えば「camera」というタグを持たせると、他のコマンドを打つ際に「camera」のタグを持っているエンティティだけを対象とするといったことができます。

要するに、同じ防具立てでも差別化することが可能ということですね。

というわけで、以下のコマンドを使って透明かつタグ付きの防具立てを召喚しましょう。

summon minecraft:armor_stand 0 60 0 {NoGravity:1b,Invisible:1b,Tags:["camera"],Rotation:[0.0f,30.0f]}

「0 60 0」の部分は座標です。
XYZの順なので、各自監視カメラで覗きたい場所の座標を入力してください。

そして、NoGravity:1bで落下しないように指定。
(空中に浮くようになります。)

Invisible:1bで透明になるように指定をし、Tags:[“camera”]でcameraのタグを付与します。
タグは”(ダブルクォーテーション)で囲まれている箇所の言葉を変えれば、好きなタグに変更できます。
なので、幾つも監視カメラを設置したい場合はタグを変更して差別化しましょう。

透明になっていると作業し辛いことも多いので、初めはInvisibleの部分を記入しなくてもいいと思います。
その場合は区切っているカンマ(,)が重複しないようにと、Invisible:1bの部分を削除してコマンドを打ちます。

最後にRotationについてですが、これは向いている方角や上下の角度を指定しています。
前半の0.0fは方角を示しており、2つ目の30.0fは上下の角度を指定しています。

それぞれ表にしておくので、参考にしてください。

方角(顔を向けている方向)文字列
南(South)0.0f
西(West)90.0f
北(North)180.0f
東(East)270.0f
視線の向く位置文字列
真下90.0f
地面と水平0.0f
真上-90.0f

今回は監視カメラの如く、上方から斜め下を見るように、視線の向きを30.0fにしました。
ほとんどの場合はこの値で大丈夫だと思いますが、気になる箇所がある場合や向かせたい方角が異なる場合は各自調整してみてください。

これで、監視カメラの設置は完了です。




監視カメラの視点にするためのコマンド

さて、ようやく下準備が終わったので監視カメラのように覗き見るコマンドを打っていきます。
そこで使っていくコマンドは、spectateコマンドです。

これは、他のプレイヤーやエンティティの視線になれるというもので、監視カメラとしての役割を全うしてくれるコマンドです。

ただし、スペクテイターモードのプレイヤーだけを対象にできるので、ゲームモードを変更してからspectateコマンドを起動するようにします。

また、スコアボードの数値もいじる必要があるので、スコアボードをリセットするコマンドも組み込みます。

実際に組んでみるコマンドブロックとコマンドは以下の通りになります。

①のコマンドブロック

gamemode spectator @p
モード条件動力
インパルス無条件動力が必要

①のコマンドブロックは、ボタンを押すことで起動するようにしておきます。
つまり、ボタンを押すことで監視カメラの視点になるようになるわけですね。

そして、このコマンドブロックではゲームモードをスペクテイターモードに変更します。
元々スペクテイターモードで遊んでいれば不要なコマンドではあるのですが、スペクテイターモードで遊んでいることは少ないと思うので、この項目はspectateコマンドを使うためにも必須ですね。

②のコマンドブロック

scoreboard players reset @a XXXX
モード条件動力
チェーン条件付き常時実行

2つ目のコマンドブロックでは、しゃがんだことを検知するスコアボードをリセットしています。

これは何故かというと、カメラ視点を解除する際にしゃがむのですが「minecraft.custom:minecraft.sneak_time」はしゃがんだ時間を計測しています。

なので、監視カメラの視点になっていないときにしゃがんでいると、既にスコアボードの値が増してしまっています。
そうなると、この後監視カメラの視点を解除するコマンドを組む際に、スコアボードの値をどの値にすればいいのか分からなくなってしまいます。

だから、毎回監視カメラの視点になるたびにスコアボードの値をリセット、つまりは0にする必要があるということですね。
リセットしておけば、カメラ視点になってからしゃがむと必ずしゃがんだ時間が1を通過することになります。

監視カメラ視点以外の時にどんなにしゃがんでいたとしても、0にリセットされているので「スコアボードの値が1になった時にカメラ視点を解除する」という風にコマンドを組んでおけば、視点を戻すコマンドには支障が出なくなります。

③のコマンドブロック

execute as @e[tag=camera] facing entity @s eyes run spectate @s @p
モード条件動力
チェーン条件付き常時実行

いよいよ本題の監視カメラの視点になるためのコマンド、spectateコマンドについてです。

やりたいこととしては、自分を監視カメラ(防具立て)の視点に変更することですが、そのままではspectateコマンドが上手くいきません。

というのも、spectateコマンドだけでは単体のエンティティを指定することができません。
要するに防具立ての視点を選択することができないということですね。

@eを選択した時点で、すべてのエンティティを選択することになってしまい、仮にこの後単体だけを指定するように指示したとしても、そもそもMinecraft側でspectateコマンドでは@eを指定できないと拒否されてしまいます。

なので、どうするのか。
答えは簡単で、executeコマンドでコマンドの実行者を指定します。

そうすると、spectateコマンドでも使える@s(実行者)で監視カメラとなっている防具立ての視点になることができます。

「execute as @e[tag=camera]」でcameraのタグを持っているエンティティが実行者ですよと仮定させています。
つまり、監視カメラとして召喚した防具立てがコマンドの実行者になるということですね。

別のタグを付与した場合は、そのタグを「tag=」の部分に書き込めばOKです。

そして、「facing entity @s」で実行者の向いている方向を向くようにするので、防具立てが向いている方角や上下を見るようになります。

あとはspectateコマンドが起動するように書かれているだけです。
@s(防具立て)の視点を@p(1番近くにいるプレイヤー)に見せるということですね。

基本的にボタンを押したプレイヤーが1番近くになると思いますが、マルチプレイなどでボタンの付近に他のプレイヤーが存在すると、そのプレイヤーが監視カメラの映像を見ることになります。

監視カメラの視点を解除するコマンド

監視カメラを作ることは出来ましたので、最後に監視カメラの視点からボタンを押した位置に戻るコマンドを組んでいきます。

先ほども少し話したように、しゃがむことで視点を解除します。
ただ、視点を解除したとしてもspectateコマンドの仕様上、元の位置に戻らずカメラのある位置に存在してしまいます。

なので、tpコマンドを使ってテレポートしましょう。

今度はリピートコマンドブロックとチェーンコマンドブロックを使って視点を解除するようにします。

①のコマンドブロック

execute if entity @p[scores={XXXX=1},x=0,y=60,z=0,dx=0,dy=0,dz=0] run gamemode creative @p
モード条件動力
リピート無条件常時実行

①のコマンドブロックではゲームモードを元に戻すのが主な役割なのですが、ゲームモードを元に戻すという選択肢は存在しないので、サバイバルモードならsurvival、アドベンチャーモードならadventureといった風に各自都合の良いものを指定してください。

上記のコマンドではクリエイティブモードで試していたので、クリエイティブモードに戻すようにしています。

また、リピートコマンドブロックの常時実行は常に作動してしまいますので、動作する条件を付与しています。

それが、「if entity @p[scores={XXXX=1},x=0,y=60,z=0,dx=0,dy=0,dz=0]」の部分ですね。
これはまず「XXXXの値が1」のプレイヤーを対象としつつ、かつ座標がx=0、y=60、z=0の位置にいるプレイヤーに限定しています。

監視カメラの視点になった時点で必ずスコアボードの値が0にリセットされているので、しゃがめば必ずスコアボードの値が1を通過することになります。

座標部分(x=,y=,z=)は防具立てを召喚した位置を同じ値にします。
そして、dx,dy,dzの値は0でOKです。

dが頭文字についているものは、それぞれの座標(x,y,z)から何マス離れている座標までを含めるかを指定するものです。

例えば、dx=5とすればxの座標から+5の値までを判定に含みます。
上記のコマンドで言うならば、xは0なので0から5までを判定の範囲に含むということですね。

防具立ての設置した座標は既に定まっているので、0で指定して問題なしということになります。

②のコマンドブロック

tp @p 152 62 86 180 0
モード条件動力
チェーン条件付き常時実行

②のコマンドブロックでは、ボタンを押した位置に戻るコマンドになっています。

上記のコマンドではx=152,y=62,z=86の位置に戻るようにしていますが、これは試作した時の座標なので、この記事を読んでいる貴方は自分が用意したボタンの近くの座標を指定すればOKです。

また、xyzの後にある数字は防具立ての向いている方向を指示したものと同じです。
はじめに方角を指定し、その後に視線の方向を指示しています。

これも設定しておくと元の視点に戻った時に毎回決まった方向を向けるので便利です。
設定したいという方は防具立てを召喚する項目まで戻って、表を参考にしてくださいね。

これですべてのコマンドを入力し終えましたので、監視カメラの完成です。
ボタンを押して監視カメラの視点を確認し、しゃがんで元の視点に戻れるか試してみましょう!

まとめ

というわけで、今回のまとめです。

今回使ったコマンドはこちら。

今回使ったコマンド
  • スコアボードの作成(しゃがみを検知)
scoreboard objectives add XXXX minecraft.custom:minecraft.sneak_time
  • 透明かつタグ付きの防具立てを召喚するコマンド
summon minecraft:armor_stand 0 60 0 {NoGravity:1b,Invisible:1b,Tags:["camera"],Rotation:[0.0f,30.0f]}
  • 監視カメラの視点になるコマンド
execute as @e[tag=camera] facing entity @s eyes run spectate @s @p
ポイント
  • 上記で紹介したコマンド以外にも、上手く動作させるためにスコアボードの値をリセットするコマンドやゲームモードの変更をするコマンドも使います!

この記事は以上になります。

  • 【まとめ】functionコマンドの基本から応用【マイクラ】
  • 【まとめ】カスタムストラクチャーの実装・カスタム方法【マイクラ】