《BE1.9.0対応》BEのスコアボードを徹底解説!/scoreboard基礎編【初級コマンド講座 #10】

どうも、初級コマンド講座第10回です。
今回は、マイクラBE1.7.0の更新で地味に追加された/scoreboardコマンドについて解説していきます。
/scoreboardコマンドは元々JEのコマンドでしたが、1.7.0でようやくBEにもやってきました。が、JEと比べて機能が大幅に制限されていて構文はJE1.13のものになっているので、BEでの構文などを解説していきます。


前回の初級コマンド講座はこちら!


1.オブジェクティブの作成

/scoreboardコマンドとは、簡単に言うとエンティティにスコア(score)と呼ばれる数字を振ることができるコマンドです。
まずはスコアボードの概念を理解していくために、オブジェクティブを作成してみます。

オブジェクティブを作るコマンド

/scoreboard objectives add [オブジェクティブ名(英数字のみ)] dummy [表示名(なくても可)]

([ ]内は任意の名前/入力時[ ]は不要)

この時点でJEとの違いがあります。BEでは「stat」が使えず、「dummy」しか使えません。
つまり、BEではプレイヤーの行動をスコアボードで直接検知することができないということです。

オブジェクティブ名と表示名の違いは後で説明しますが、表示名を省略した場合はオブジェクティブ名と同じ扱いになります。

補足オブジェクティブを削除したい場合のコマンド
/scoreboard objectives remove [オブジェクティブ名]([ ]内は任意の名前/入力時[ ]は不要)

まずはオブジェクティブを2つ作成してみます。

/scoreboard objectives add test1 dummy テスト1

/scoreboard objectives add test2 dummy テスト2

この2つのコマンドをチャットなどで実行しましょう(コマンドブロックで実行する必要はありません)。これでtest1とtest2という2つのオブジェクティブができました。

…とその前に、「オブジェクティブとは何ぞや??」と思われている方が大半だと思いますので説明します。
簡単に言うと、オブジェクティブとはです。先程のコマンドは、test1とtest2(表示名はテスト1とテスト2)という名前の箱を作るコマンドです。

と、早速先程のコマンドを実行してみた行動力のある方はわかると思いますが、先程の2つのコマンドを実行しても、見た目では何も起こりません。


では、今度は作った箱を可視化させてみましょう。
先程作った箱、もといオブジェクティブの1つを、画面横に表示させてみます。

オブジェクティブを画面横に表示するコマンド

/scoreboard objectives setdisplay sidebar [オブジェクティブ名]

([ ]内は任意の名前/入力時[ ]は不要)

今回はtest1のオブジェクティブを表示してみるので、[オブジェクティブ名]にはtest1と入力しましょう。

すると、画面横にテスト1と表示されます。

はい、オブジェクティブを作成する時にオブジェクティブ名と表示名を違うものにしましたが、表示名とはオブジェクティブを可視化した時に表示される名前のことです。

ではオブジェクティブ名はなんのためのものかというと、コマンドでオブジェクティブを指定するための名前です。
先程のオブジェクティブを表示するコマンドで、[オブジェクティブ名]を指定しましたね。
なので、オブジェクティブ名はなるべくわかりやすい名前にすることをおすすめします。

ちなみに、1つの場所(画面横やポーズメニューなど)には1つのオブジェクティブしか表示できません。

補足オブジェクティブを表示するコマンドの、sidebarの部分をlistにすると、ポーズメニューのプレイヤーの名前の下にスコアが表示されます。
同様にbelownameにすると、プレイヤーの名前の下にスコアが表示されます(マルチプレイ時のみ見ることが可能)
また、オブジェクティブ名を入力せずに実行するとその部分のオブジェクティブの表示を消すことができます。オブジェクティブ名の後ろには、ascendingまたはdescendingを入れることが出来ます。これはスコアの表示順を指定でき、ascendingにするとスコアが小さいほうから上にdescendingにするとスコアが大きいほうから上に並びます。


2.オブジェクティブにスコアを入れる

スコアボードの難しいところはここからです。
先程オブジェクティブと呼ばれる箱を作成しましたが、その2つの箱にはまだ中身がありませんね。
オブジェクティブの中には、プレイヤーなど全てのエンティティがオブジェクティブを作成した時点で入れられるのですが、それらのエンティティはまだスコア(score)と呼ばれる数字を持っていないため、オブジェクティブの中には何も入っていない扱いになります。

オブジェクティブの中身を作るためには、エンティティにスコアを持たせる必要があります。
まず試しにプレイヤー、画像で言うスティーブにのみスコアを与えてみましょう。

オブジェクティブのスコアを好きな値にするコマンド

/scoreboard players set [ターゲット]
[オブジェクティブ名] [数字]

([ ]内は任意のセレクタや名前、数値/入力時[ ]は不要)

補足setの部分をaddにすればスコアに数字を足すことができます。
またremoveにするとスコアから数字を引くことができます。

まずは、プレイヤーのtest1のスコアのみを3にしてみます。

/scoreboard players set @p test1 3

このコマンドを実行すると、画面横に自分のゲーマータグとともに3と表示されます。

これで、test1のスコアが3のプレイヤーだけが中に入ったことになります。

つまり、今test1の箱の中にいるのは、test1のスコア3を持っているプレイヤーのみということです。他のエンティティは入っていない扱いになっています。
ただし、今プレイヤーが持っているのは、あくまでtest1のスコア3で、test2の中ではスコアは持っていません。
この概念を例えるなら、プレイヤーはtest1という()の中でしか増やしたり減らしたりできない通貨を3だけ持っているという感じですかね。このtest1の通貨は、test2という国の中では使えませんしtest2の通貨に換金して持っていくこともできません。

補足この通貨もといスコアは、コマンドでしか増やしたり減らしたりすることができませんここがJEとの違いで、JEではプレイヤーの行動などを検知してスコアを増減させることができるのですが、BEではそれができません。

では、今度はプレイヤーにtest2のスコアを同時に持たせてみましょう。

/scoreboard players set @p test2 10

これを実行しても、見た目では何も起こりません。

ですが、実際にはプレイヤーはtest1のスコアを3、test2のスコアを10持っています。

この概念は非常にわかりずらいのですが、先程同様test1という国の通貨を3、test2という国の通貨を10持っていると考えると、少しはわかりやすくなるかもしれません。

ちなみに、スコアを与えるコマンドのターゲットを変更すれば、プレイヤー以外のエンティティにもスコアを持たせることができます

また、持っているスコアを削除したい場合は、スコアを0にするのではなく完全に削除することもできます。

スコアをリセットするコマンド

/scoreboard players reset [ターゲット] [オブジェクティブ名]

([ ]内は任意のセレクタや名前/入力時[ ]は不要)

このコマンドを実行すると、指定したオブジェクティブ内でターゲットが持っているスコアを完全に削除することができます。


3.オブジェクティブや持っているスコアを確認する

オブジェクティブが増えると、どのオブジェクティブでどれだけスコアを持っていたかわからなくなることがあると思います。そこで、作成したオブジェクティブやプレイヤーの持っているスコアを確認する方法もお教えします。

まずオブジェクティブの一覧を表示するコマンドです。

オブジェクティブの一覧を表示するコマンド

/scoreboard objectives list

実行すると、チャットにオブジェクティブの一覧が表示されます。

また、持っているスコアを知りたい場合はこのコマンドを実行しましょう。

持っているスコアを表示するコマンド

/scoreboard players list [ターゲット]

([ ]内は任意のセレクタや名前/入力時[ ]は不要)

実行すると、ターゲットの持っているスコアの一覧がチャットに表示されます。


4.スコアを他のコマンドで使用する

さて、ここまで/scoreboardコマンド自体の解説をやってきましたが、実はスコアボード単体ではほとんど役に立ちません
スコアボードは、引数を使って他のコマンドと組み合わせることで真価を発揮します。

試しに、test1のスコアが3のプレイヤーのみに「あなたのtest1のスコアは3です」というメッセージを/tellコマンドで送ってみましょう。

/tell @a[scores={test1=3}] あなたのtest1のスコアは3です

これはscores引数を使ってtest1のスコアが3のプレイヤーにのみメッセージを送っています。

しかし、見た通りですがスコアを指定するscores引数は他の引数とは書き方が少し違います。
scores引数の基本的な書き方はこんな感じです。

@a(セレクター)[scores={オブジェクティブ名=数値または数値の範囲}]

数値の部分には、”1以上”だったり”10以下”だったり”2以上8以下”だったりと、範囲の条件を指定することもできます。

まずは、test1のスコアが1以上のプレイヤーのみに「あなたのtest1のスコアは1以上です」というメッセージを送るコマンドを作ってみます。

/tell @a[scores={test1=1..}] あなたのtest1のスコアは1以上です

このコマンドのように、指定した数字以上の範囲にしたい場合は、..(ドット2つ)の前に数字を入れます。

逆に、指定した数字以下の範囲にしたい場合は、..の後ろに数字を入れます。

また、”1以上10以下”のように、~以上~以下の範囲にしたい場合は、1..10のように..の前と後ろに数字を入れます。に入れた数字以上後ろに入れた数字以下、の範囲を対象にします。

test1のスコアが3かつtest2のスコアが10、のように複数の条件を指定したい場合は、

@a[scores={test1=3,test2=10}]

のようにすればできます。

さらに、!による否定もできます。例えば、

@a[scores={test1=!3}]

のようにすると、test1のスコアが3でないプレイヤーを指定することができます。

スコアの範囲の条件の書き方一覧
[scores={test1=3}] test1のスコアが3の時を条件にする
[scores={test1=3..}] test1のスコアが3以上の時を条件にする
[scores={test1=..3}] test1のスコアが3以下の時を条件にする
[scores={test1=3..10}] test1のスコアが3以上10以下の時を条件にする
[scores={test1=3,test2=10}] test1のスコアが3かつtest2のスコアが10の時を条件にする

いかがだったでしょうか。スコアボードは、概念を理解するのが難しいコマンドなので、できるだけ概念を解説しようとしてみました。
とはいえ、スコアボードは何かを作ってみないと理解は難しいので、次回は実践・応用編としてスコアボードでタイマーを作ってみます。
また、スコアボードにはまだ今回紹介した以外にも機能があるので、それも次回に解説します。

では、閲覧ありがとうございました。


前の講座↓

次の講座↓