ユキミ大福のマイクラBE生活

Minecraft統合版で遊んだりゲーム作ったりするブログ

コマンド構文解説-難しいけど滅茶苦茶便利!/scoreboard-

  投稿日:2021/02/27

最終更新日:2021/05/09

 

どうも、ユキミ大福です。

今回はMinecraft統合版のコマンドの内の1つである『 /scoreboard 』について解説をしていきます。

ここで解説するコマンド等は、解説する注意事項等をよく読み、個人でより詳しく調べた上で、個人の責任において使用して下さい。コマンド等の使用によって如何なる損害が発生しても、筆者であり当ブログの管理者でもあるわたくしユキミ大福は一切の責任を負いかねますので、ご了承下さい。

  

今回のコマンドは?

今回ご紹介するコマンドは『 /scoreboard (スコアボード)』です。このコマンドは個人的に、Minecraft統合版でのゲーム開発においては三種の神器ならぬ、三種の神コマンドだと思っています(残り2つは /execute (エグゼキュート)と /tag (タグ) )。

/scoreboard 無しにわたくしが作ったゲームは成り立ちません。それぐらい滅茶苦茶応用性と可能性が広いコマンドなのです。しかし機能が多い反面、扱いが難しいコマンドでもあります。1つ1つ丁寧に解説していきますので、良ければお付き合いください。

 

/scoreboard (objectives モード)のコマンド構文

 

/scoreboard objectives add <オブジェクティブ名> dummy <表示名>

 

/scoreboard objectives remove <オブジェクティブ名>

 

/scoreboard objectives list

 

/scoreboard objectives setdisplay <表示場所> <オブジェクティブ名> <表示順>

 

/scoreboard objectives setdisplay <表示場所>

 

  • <オブジェクティブ名>:必須。setdisplay の場合は省略可。
    オブジェクティブ名を16文字以内で指定する。全角文字も使用できる。空白を含む場合は「" (ダブルクォーテーション)」で囲めば指定できる。setdisplay で省略した場合、指定した表示場所に表示されているプレイヤースコアを非表示にする(スコアそのものは消えない)

  • <表示名>:省略可
    プレイヤースコアを表示する場合のオブジェクティブの表示名を32文字以内で指定する。全角文字も使用できる。空白を含む場合は「" (ダブルクォーテーション)」で囲めば指定できる。これを省略してプレイヤースコアを表示した場合、<オブジェクティブ名>で指定した名前がそのまま使われる。

  • <表示場所>:必須
    プレイヤースコアを表示する場所を指定する。指定できるのは以下の3ヵ所。この後の<オブジェクティブ名>を省略すると、指定した表示場所に表示されているプレイヤースコアを非表示にする(スコアそのものは消えない)

    belowname
     一定距離内のプレイヤーのネームタグの下。<表示場所>をこれに指定した場合は<表示順>を入力できない

    list
     ポーズ画面の左に表示される、ワールド内のプレイヤー名を表示している場所。プレイヤー名の右下がスコア、左の数字は順位で、順位順に自動的に並べ替えられる。ダミープレイヤーのスコアも表示される。

    sidebar
     通常画面の右端の中辺り。順位順に自動的に並べ替えられる。ダミープレイヤーのスコアも表示される。

 

f:id:YukimiD1999:20210226013733p:plain

belownameに「プレイヤーナンバー」という表示名のスコアを表示した

f:id:YukimiD1999:20210226014042p:plain

listに「プレイヤーナンバー」という表示名のスコアを表示した

f:id:YukimiD1999:20210226014102p:plain

sidebarに「プレイヤーナンバー」という表示名のスコアを表示した

 

  • <表示順>:省略可
    list または sidebar の位置にプレイヤースコアを表示する場合並べ替え(順位付け)の順序を指定する。指定できるのは以下の2つで、省略した場合は「descending」として扱われる。

    ascending昇順(小さい順)で並べ替える。つまり、スコアが一番小さいプレイヤーが一番上に来る。

    descending降順(大きい順)で並べ替える。つまり、スコアが一番大きいプレイヤーが一番上に来る。

 

/scoreboard (objectives モード)の失敗条件

  • 構文が適切でない(スペルミス等)。
  • オブジェクティブ名は全て大文字・小文字を区別するので注意。
  • addの場合、既に存在するオブジェクティブ名を<オブジェクティブ名>に入力してもエラーになる。
  • add以外で<オブジェクティブ名>に存在しないオブジェクティブ名を指定するとエラーになる。
  • <オブジェクティブ名>は16文字以内<表示名>は全角・半角32文字以内である必要がある。
  • listの場合、オブジェクティブが一切存在しない場合は失敗になる。
  • setdisplayで<オブジェクティブ名>を指定しなかった場合、指定した<表示場所>にプレイヤースコアが表示されていない場合は失敗になる。

 

/scoreboard (objectives モード)の成功条件

  • 上記の失敗条件を満たしていない場合。
  • listの場合、オブジェクティブが1つでもあれば、例えそのオブジェクティブにスコアが一切保存されていなくとも成功扱いになる。
  • setdisplayで<オブジェクティブ名>を指定した場合、指定した表示場所に既に別のオブジェクティブのプレイヤースコアが表示されていても、指定したオブジェクティブのプレイヤースコアに表示が上書きされ、成功扱いとなる。
  • setdisplayで同一の表示場所に対して、元々表示されているオブジェクティブと同じオブジェクティブを指定しても成功する。<表示順>の更新も可能。

 

/scoreboard (objectives モード)の実行例

例1)

コマンド:/scoreboard objectives add Object dummy

実行結果:「Object」というオブジェクティブ名のオブジェクティブを作成する。

 

例2)

コマンド:/scoreboard objectives add pNum dummy "プレイヤーナンバー"

実行結果:「pNum」というオブジェクティブ名で「プレイヤーナンバー」という表示名のオブジェクティブを作成する。

 

例3)

コマンド:/scoreboard objectives remove Object

実行結果:「Object」というオブジェクティブ名のオブジェクティブを削除する。「Object」に保存されていたスコアも全て消去され(スコアの数値が「0」になるわけではないので注意)、「Object」が表示されていた表示場所もカラになる。

 

例4)

コマンド:/scoreboard objectives list

実行結果:そのワールドに存在するオブジェクティブの数が表示されてた上で、それぞれのオブジェクティブのオブジェクティブ名、表示名、データ型(統合版では今のところ dummy しか存在しない)も表示される。オブジェクティブが一切存在しない場合はエラーとなる。

 

例5)

コマンド:/scoreboard objectives setdisplay sidebar pNum

実行結果:表示場所「sidebar」に「pNum」というオブジェクティブ名のオブジェクティブに保存されたプレイヤースコアを、降順(大きい順)で表示する。「sidebar」に別のオブジェクティブが表示されていた場合は、オブジェクティブ「pNum」のスコア表示に上書きする。オブジェクティブ「pNum」に表示名が設定されている場合は、その表示名で表示される。

 

例6)

コマンド:/scoreboard objectives setdisplay sidebar

実行結果:表示場所「sidebar」に表示されているオブジェクティブを非表示にする(そのオブジェクティブに保存されているスコアが消えるわけではない)。

 

/scoreboard (objectives モード)の詳細解説

/scoreboard (objectives モード)の概要

/scoreboard の objectivesモードオブジェクティブそのものの操作・管理をするコマンドです。/scoreboard の objectivesモードの詳細解説をする前に、ここまでの解説で突然登場したオブジェクティブとは何かをまずは解説します。

 

「オブジェクティブ」とは何ぞ?

オブジェクティブとは、プレイヤーのスコア(値)を保存しておける変数です。もう少し簡単な言い方にすると、プレイヤーのスコアを入れておける箱のようなものです。人によってはオブジェクトと言う人も居ます。

remove でオブジェクティブを削除すると、そのオブジェクティブに保存されていたスコアも削除されるのは、そのスコアを入れておいた箱そのものが無くなったためと言えば、オブジェクティブの考え方が少しわかるでしょうか。

…というのがオブジェクティブ(オブジェクト)の説明ですが、これだけではイマイチピンと来ない方もいるかもしれません。そのような方は、この記事の後ろの方で使用例を挙げますので、そこでイメージをつかんでいただければと思います。

 

objectives (オブジェクティブス)モードの解説の後に、players (プレイヤーズ)モードの解説をしますが、その playersモードで具体的なスコアの操作をします。しかし、この objectivesモードでオブジェクティブを作成しておかないとスコアを設定・保存できないため、まずこの objectivesモードが必要になるというわけです。

objectivesモードではオブジェクティブそのものの作成・確認・削除等の設定・操作が可能です。オブジェクティブそのものをいじりたい場合は objectivesモードスコアをいじりたい場合は playersモードと覚えましょう。

 

/scoreboard (objectives モード)の実行結果等々

コマンドの実行結果は「コマンドの成功・失敗・エラー」のいずれかになります。

成功・失敗した場合には以下の様に返って来ます。

  • add (アド)
    ◇成功:
     ・「新しいオブジェクト'(オブジェクティブ名)'を追加しました」
    ◇失敗:
     ・「'(オブジェクティブ名)'というオブジェクトは既に存在します」

  • remove (リムーブ)
    ◇成功:
     ・「オブジェクト'(オブジェクティブ名)'を削除しました」
    ◇失敗:
     ・「'(オブジェクティブ名)'ではオブジェクトは見つかりませんでした」
     
  • list (リスト)
    ◇成功:
     ・「スコアボードに(オブジェクティブの数)個のオブジェクトを表示: (改行)- (オブジェクティブ名): '(表示名)'と表示され、型は 'dummy' です」
     ・「(改行)- (オブジェクティブ名): …’dummy’ です」は、全てオブジェクティブについてそれぞれ表示される。
    ◇失敗:
     ・「スコアボードにオブジェクトがありません」
     
  • setdisplay (セットディスプレイ)
    ◇成功:
     ・「スロット '(表示場所)' の表示オブジェクトは、'(オブジェクティブ名)'にセットされました」
     ・「オブジェクト表示スロット '(表示場所)' を空にしました」
    ◇失敗:
     ・表示場所にオブジェクティブを表示する場合、構文が間違っていない限りは必ず成功する。
     ・「'(オブジェクティブ名)'ではオブジェクトは見つかりませんでした」

 

いずれの場合(add, remove, list, setdisplay)でもコマンドブロックが保持・出力する結果は「コマンドの実行に成功したか(True or False)」のみです。成功した場合、RSコンパレーターを用いてRS動力を取り出すと必ず1になります。

 

続いては、playersモードの解説です。

 

/scoreboard (players モード)のコマンド構文

 

/scoreboard players add <セレクター> <オブジェクティブ名> <数値(int)>

 

/scoreboard players remove <セレクター> <オブジェクティブ名> <数値(int)>

 

/scoreboard players set <セレクター> <オブジェクティブ名> <数値(int)>

 

/scoreboard players reset <セレクター> <オブジェクティブ名>

 

/scoreboard players random <セレクター> <オブジェクティブ名> <最小値(int)> <最大値(int)>

 

/scoreboard players test <セレクター> <オブジェクティブ名> <最小値(int)> <最大値(int)>

 

/scoreboard players list <セレクター>

 

/scoreboard players operation <セレクター(ターゲットスコア)> <オブジェクティブ名> <演算子> <セレクター(ソーススコア)> <オブジェクティブ名(ソーススコア)>

 

  • <セレクター>:必須
    基本的には対象エンティティを記述する部分だが、以下も指定できる。

    ◇ターゲットセレクター:
     ・他のコマンドの<セレクター>の時と同じ。
     ・プレイヤー以外のエンティティでも可。

    ◇ゲーマータグ:
     ・他のコマンドの<セレクター>の時と同じ。
     ・空白を含む場合や全角文字を含む場合は「" (ダブルクォーテーション)」で囲めばOK。
     ・Switch等ではゲーマータグではなくプレイヤー名(Switchではプレイしているアカウント名)の方が有効な場合もあるため、ポーズ画面で確認すると良い(ポーズ画面で表示される方をコマンドで記述する)。

    ◇ダミープレイヤー:
     ・「" (ダブルクォーテーション)」で囲むことで、本来は存在しない仮想のプレイヤー(ダミープレイヤー)に対してスコアを付与できる。このダミープレイヤーは /scoreboard でのみ有効。

    ◇「* (アスタリスク)」:
     ・<オブジェクティブ名>で指定したオブジェクティブにスコアが保存されている全てのエンティティ及びダミープレイヤーを対象にする。<セレクター(ターゲットスコア)>と<セレクター(ソーススコア)>の両方に「*」を設定することはできない(片方だけなら可)。

  • <オブジェクティブ名>:必須
    存在するオブジェクティブのオブジェクティブ名を指定する。表示名ではないので注意。

  • <数値(int)>:必須
    加算(add)、減算(remove)、設定(set)したい値をint型の数値で入力する。数値は -2,147,483,648~2,147,483,647 の間である必要がある。

  • <最小値(int)>:必須
    検知(test)、乱数付与(random)での下限値をint型の数値で入力する。数値は -2,147,483,648~2,147,483,647 の間である必要がある。「* (アスタリスク)」を入力することもでき、その場合は「-2,147,483,648」として扱われる。

  • <最大値(int)>:省略可
    検知(test)、乱数付与(random)での上限値をint型の数値で入力する。数値は -2,147,483,648~2,147,483,647 の間である必要がある。省略した場合、または「* (アスタリスク)」を入力した場合は「2,147,483,647」として扱われる。

  • <演算子>:必須
    ターゲットスコアに対し、ソーススコアを用いて行いたい算術演算を指定する。指定できる算出演算は以下の通り。なお「><」以外において、ソーススコアの値は変更されない

    ◇「+=」:加算(足し算)
     ・ターゲットスコアの値に、ソーススコアの値を加算する。

    ◇「-=」:減算(引き算)
     ・ターゲットスコアの値を、ソーススコアの値で減算する。

    ◇「*=」:乗算(掛け算)
     ・ターゲットスコアの値を、ソーススコアの値を掛けた値にする。

    ◇「/=」:除算(割り算 / 小数点以下切り捨て)
     ・ターゲットスコアの値を、ソーススコアの値で割った値にする。小数点以下は切り捨てられる。

    ◇「%=」:除算(割り算 / 剰余算出)
     ・ターゲットスコアの値を、ソーススコアの値で割った余りにする。

    ◇「=」:付与
     ・ターゲットスコアの値を、ソーススコアの値と同じにする。

    ◇「<」:最小比較付与
     ・ターゲットスコアとソーススコアを比較し、ターゲットスコアの値がソーススコアの値よりも小さい場合、ターゲットスコアの値を、ソーススコアの値と同じにする。

    ◇「<」:最大比較付与
     ・ターゲットスコアとソーススコアを比較し、ターゲットスコアの値がソーススコアの値よりも大きい場合、ターゲットスコアの値を、ソーススコアの値と同じにする。

    ◇「><」:交換
     ・ターゲットスコアの値とソーススコアの値を入れ替える。

 

/scoreboard (players モード)の失敗条件

  • 構文が適切でない(スペルミス等)。
  • 存在しないオブジェクティブ名を指定している。
  • <数値(int)>、<最小値(int)>、<最大値(int)>で指定した数値が -2,147,483,648~2,147,483,647 の範囲にない。
  • <最大値(int)>で指定した数値が<最小値(int)>よりも小さい(「test」の場合、エラーにはならないので注意)。
  • <セレクター(ソーススコア)>と<オブジェクティブ名(ソーススコア)>で指定したソーススコアが存在しない。
  • どのオブジェクティブにもスコアが存在しない(listの場合)。

 

/scoreboard (players モード)の成功条件

  • 上記の失敗条件を満たしていない場合。
  • 計算の結果、スコアの値が -2,147,483,648~2,147,483,647 の範囲を超えると、スコア値が算術オーバーフローを起こすが、エラーや失敗にならないので注意。
  • 計算する際に、計算される側の値(ターゲットスコア)にスコアが存在しない場合は「ターゲットスコア = 0」として扱い、計算を行う。
  • operationではターゲットスコアとソーススコアが同じものでも成功する。
  • operationでゼロ除算が発生した場合、ターゲットスコアの値は変わらない(エラーや失敗にならないので注意)。

 

/scoreboard (players モード)の実行例

例1)

コマンド:/scoreboard players add @p points 3

実行結果:基準座標から1番近いプレイヤーのスコアに「3」を加算し、「points」というオブジェクティブ名のオブジェクティブに保存する。

 

例2)

コマンド:/scoreboard players remove @p points 12

実行結果:基準座標から1番近いプレイヤーのスコアを「12」で減算し、「points」というオブジェクティブ名のオブジェクティブに保存する。

 

例3)

コマンド:/scoreboard players add @p points -12

実行結果:基準座標から1番近いプレイヤーのスコアに「-12」を加算(「12」を減算)し、「points」というオブジェクティブ名のオブジェクティブに保存する。

 

例4)

コマンド:/scoreboard players set @r pNum 1

実行結果:そのワールドに存在する全てのプレイヤーの中からランダムな1人のスコアを「1」に設定し、「pNum」というオブジェクティブ名のオブジェクティブに保存する。

 

例5)

コマンド:/scoreboard players reset * pNum

実行結果:「pNum」というオブジェクティブ名のオブジェクティブに保存されている、全てのプレイヤー・ダミープレイヤー・エンティティのスコアをカラにする(「スコア = 0」にするという意味ではない)。

 

例6)

コマンド:/scoreboard players random @a[scores={pNum=1..8}] tpPlace 1 10

実行結果:そのワールドに存在する全てのプレイヤーの中から、「pNum」で保存されているスコアの値が「1~8」のプレイヤー全てのスコアを、それぞれ「1~10」の内からランダムに設定し、「tpPlace」というオブジェクティブ名のオブジェクティブに保存する。

 

例7)

コマンド:/scoreboard players test "second" timer 1 60

実行結果:「second」という名前のダミープレイヤーの、「timer」で保存されているスコアの値が「1~60」かどうかを検知する。スコアの値が「1~60」の間なら成功、そうでなければ失敗。

 

例8)

コマンド:/scoreboard players list *

実行結果:存在するオブジェクティブのいずれか1つにでもスコアが保存されている全てのプレイヤー・ダミープレイヤー・エンティティの、全てのスコアを保存しているオブジェクティブとセットで表示する。

 

例9)

コマンド:/scoreboard players operation "TeamRed" points += @p[scores={pNum=1}] points

実行結果:

  • ターゲットスコア:
    「TeamRed」という名前のダミープレイヤーが「points」に保存しているスコア

  • ソーススコア:
    基準座標から最も近く、「pNum」に1を保存しているプレイヤーが「points」に保存しているスコア

  • 実行結果:
    ターゲットスコアの値にソーススコアの値を加算し、その結果をターゲットスコアに保存する。

 

/scoreboard (players モード)の詳細解説

/scoreboard (players モード)の概要

/scoreboard の playersモードプレイヤー・エンティティに対するスコアの操作・管理をするコマンドです。この playersモードこそが /scoreboard の中核機能と呼べると思います。色々機能がありますので、実際に機能を使いながら解説しましょう。

 

Step01: オブジェクティブを作る

まずはオブジェクティブが無いと何もできないので、オブジェクティブを objectivesモードで作成しましょう。今回は以下のコマンドを打ちます。

 

/scoreboard objectives add pNum dummy

 

これで「pNum」というオブジェクティブ名のオブジェクティブができました。

ちなみに、オブジェクティブ名は皆さんの好きな物で構いませんが、この後もこのオブジェクティブ名を使用するのでご注意下さい。

 

なお、objectivesモードのsetdisplayでどこかしらにスコアを表示する場合の表示名を「pNum」にしたくない場合は、以下の様に入力します。

 

/scoreboard objectives add pNum dummy "プレイヤーナンバー"

 

上のコマンドの「プレイヤーナンバー」の部分が表示名なので、ここをお好きな物に変えて下さい。

 

ついでに「pNum」に何が保存されているかわかりやすいように、表示できる様にしてしまいましょう。

 

/scoreboard objectives setdisplay sidebar pNum

 

f:id:YukimiD1999:20210227153955p:plain

sidebarの位置に「pNum」を表示できるようにした

sidebar」の部分を「belowname」や「list」にすることで、ネームタグの下やポーズ画面に表示できるようになります。この辺もお好みでどうぞ。

 

Step02: 自分にスコアを設定してみる

ここからは playersモードでスコアを操作してみましょう。まずは「set」を使って自分のスコアを特定の値に設定してみます。

 

/scoreboard players set @p pNum 1

 

f:id:YukimiD1999:20210227155543p:plain

sidebarに注目すると、YukimiD1999の隣に赤文字で「1」とある

上のコマンドをチャット欄から打ち込んだため、わたくし(YukimiD1999)の「pNum」でのスコアが「1」になりました。「sidebar」の位置に表示されている「pNum」にも、わたくしのゲーマータグの右に赤文字で「1」とありますね(ちょっと見ずらいですが…)。

 

Step03: ダミープレイヤーのスコアを設定してみる

今度はダミープレイヤーのスコアを特定の値に設定してみます。ダミープレイヤーの作成とスコアの設定は簡単で、以下の様に打ち込みます。

 

/scoreboard players set "Player2" pNum 2

 

f:id:YukimiD1999:20210227155924p:plain

sidebarに注目すると、YukimiD1999の上に「Player2」が現れた

わたくし(YukimiD1999)の上に本来存在しない「Player2」という名前のダミープレイヤーが現れ、「pNum」でのスコアが「2」と表示されています。

もちろん、上のコマンドの「Player2」の部分を変えれば、他の名前のダミープレイヤーを作成することができます。

 

「ダミープレイヤー作成機能の何が凄いの?」という部分に関しては、コマンド解説の応用編でちょくちょくやっていこうと思いますので、そちらをご覧下さい。とりあえず今は「そんなこともできるのね」と軽く流していただいて結構です。

 

Step04: スコアを加算・減算してみる

次は設定したスコアを計算で変動させてみましょう。まずは以下の様に打ち込んでみます。

 

/scoreboard players add @p pNum 3

 

f:id:YukimiD1999:20210227161351p:plain

sidebarに注目すると、YukimiD1999のスコアが「4」になっている

わたくしの「pNum」でのスコアに「3」を加算しました。よって、わたくしの「pNum」でのスコアが「4」になりました。

 

今度は以下の様に打ち込み、「Player2」のスコアを変動させてみます。

 

/scoreboard players remove "Player2" pNum 5

 

または

 

/scoreboard players add "Player2" pNum -5

 

f:id:YukimiD1999:20210227161448p:plain

sidebarに注目すると「Player2」のスコアが「-3」になっている

どちらでも良いので実行すると「Player2」の「pNum」が「-3」になっています。上のコマンドは「2 から 5 を引く」計算をし、下のコマンドは「2 に -5 を足す」計算をしているため、計算結果が変わらないのです。

このように加算・減算については実質「add」だけで事足りてしまうため、「remove」は覚える必要がありません

 

続いては目の前にいる人(YD.Polaris)にもスコアを付与してみましょう。

 

/scoreboard players add @a pNum 1

 

f:id:YukimiD1999:20210227162738p:plain

sidebarに注目すると、YD.Polarisも現れた

「@a」としたため、わたくしの「pNum」も「+1」されて「5」になっています。

先程までの画像でわかる通り、YD.Polarisは「pNum」でのスコアを一切持っていませんでした。それにもかかわらず、YD.Polarisの「pNum」は「1」になりました。

構文解説の部分でも触れましたが、元々そのオブジェクティブでスコアを持っていないプレイヤー(ダミープレイヤー・エンティティも含む)のスコアに対して計算を行うと、その元々のスコアを「0」として扱い、計算を行います。

このため「pNum」でスコアを持っていなかったYD.Polarisですが、そのスコアを「0」として扱い、スコアを「+1」したためYD.Polarisのスコアが「1」となったわけです。

 

なお「@a」セレクターはプレイヤーのみを対象とするため、ダミープレイヤーである「Player2」のスコアは変動していません。

 

Step05: スコアを削除してみる

次は設定したスコアを削除してみましょう。以下の様に打ち込んでみます。

 

/scoreboard players reset @p[c=-1] pNum

 

f:id:YukimiD1999:20210227165850p:plain

sidebarからYD.Polarisが消えた

セレクターが「@p」ですが、引数に「c=-1」とあるため、基準座標(今回はわたくしが実行者なのでわたくしが居る座標)から最も遠いプレイヤーであるYD.Polarisの「pNum」でのスコアが削除され、sidebarにも表示されなくなりました。

ここまでちょいちょい注釈を入れて来ましたが、スコアを削除するというのは、スコアを0にするという意味ではありません。「スコアを0にする」というのは箱の中に「0」という数字を入れておくもので、「スコアを削除する」というのは箱そのものを消し去るとイメージすると良いでしょう。

 

なお、エンティティのスコアはそのエンティティが死亡するとオブジェクティブからスコアが削除されますが、プレイヤーのスコアはそのプレイヤーが死亡したりそのワールドから抜けても保存され続けます

f:id:YukimiD1999:20210227170045p:plain

スコアが「1」だったYD.Polarisが「オフラインのプレイヤー」となっている

上の画像で「オフラインのプレイヤー」となっているのはYD.Polarisのスコアです。YD.Polarisがワールドから抜ける前にYD.Polarisのスコアをリセットしないと、セレクターを「*」にして「reset」するか、オブジェクティブそのものを削除しない限り、スコアは残り続けますので気を付けて下さい。

 

Step06: オブジェクティブを削除してみる

最後にオブジェクティブを削除してみましょう。以下のコマンドを打ちます。

 

/scoreboard objectives remove pNum

 

f:id:YukimiD1999:20210227170458p:plain

「pNum」そのものが削除されたため、sidebarからも消えた

これで「pNum」というオブジェクティブが削除できました。オブジェクティブそのものが無くなったため、YukimiD1999や「Player2」ダミープレイヤーのスコアも全て削除されています。

 

これらが大体の基本操作です。応用法についてはコマンド解説応用編をご覧下さい。この/scoreboardがいかに凄いコマンドかよくわかると思います。

 

/scoreboard (players モード)の実行結果等々

コマンドの実行結果は「コマンドの成功・失敗・エラー」のいずれかになります。

成功・失敗した場合には以下の様に返って来ます。

 

  • add (アド)
    ◇成功:
     ・「(対象名) の [(オブジェクティブ名)] に (数値) 追加しました(現在 (計算結果))」
    ◇失敗:
     ・「'(オブジェクティブ名)'ではオブジェクトは見つかりませんでした」
     ・「セレクターに合う対象がありません」

  • remove (リムーブ)
    ◇成功:
     ・「(対象名) の [(オブジェクティブ名)] から (数値) を除きました(現在 (計算結果))」
    ◇失敗:
     ・「'(オブジェクティブ名)'ではオブジェクトは見つかりませんでした」
     
    ・「セレクターに合う対象がありません」

  • set (セット)
    ◇成功:
     「(対象名) の (オブジェクティブ名) を (数値) に設定しました」
    ◇失敗:
     ・「'(オブジェクティブ名)'ではオブジェクトは見つかりませんでした」

     ・「セレクターに合う対象がありません」

  • reset (リセット)
    ◇成功:
     「プレイヤー %(対象名) のスコア (オブジェクティブ名) をリセットしました」
    ◇失敗:
     ・「'(オブジェクティブ名)'ではオブジェクトは見つかりませんでした」
     ・「セレクターに合う対象がありません」

  • random (ランダム)
    ◇成功:
     「(対象名) の (オブジェクティブ名) を (数値) に設定しました」
    ◇失敗:
     ・「'(オブジェクティブ名)'ではオブジェクトは見つかりませんでした」

     ・「セレクターに合う対象がありません」

  • test (テスト)
    ◇成功:
     「スコア (数値) は (最小値) ~ (最大値) の範囲内です」
    ◇失敗:
     ・「スコア (数値) は (最小値) ~ (最大値) の範囲にありません」
     ・「'(オブジェクティブ名)'ではオブジェクトは見つかりませんでした」

     ・「セレクターに合う対象がありません」

  • operation (オペレーション)
    ◇成功:
     「(対象名) の (オブジェクティブ名) を (数値) に設定しました」
    ◇失敗:
     ・「プレイヤー (対象名) にはスコアの記録はありません(改行)一致するものはありませんでした」
     ・「'(オブジェクティブ名)'ではオブジェクトは見つかりませんでした」

     ・「セレクターに合う対象がありません」

  • list (リスト)
    ◇成功:
     ・「選択された (対象がスコアを保存しているオブジェクティブの数) 個のオブジェクトを (対象名) に表示: (改行)- (表示名): (スコア) (オブジェクティブ名)」
     ・「(改行)- (表示名): …(オブジェクティブ名)」は全てオブジェクティブについてそれぞれ表示される。
     ・「選択された…(オブジェクティブ名)」は対象となった、スコアの存在する全てのプレイヤー・ダミープレイヤー・エンティティについてそれぞれ表示される。
    ◇失敗:
     ・「'(オブジェクティブ名)'ではオブジェクトは見つかりませんでした」
     ・「セレクターに合う対象がありません」

いずれの場合(add, remove, set, reset, random, test, operation, list)でもコマンドブロックが保持・出力する結果は「コマンドの実行に成功したか(True or False)」「コマンドが何人に対して成功したか(int)」の2点です。コマンドが成功した人数(ダミープレイヤー・エンティティも含む)については、RSコンパレーターを用いてRS動力の形で取り出せます。

 

/scoreboard の強み・使い道

ゲーム制作においては繰り返しになりますが、超超超重要な役割を果たします。ゲームプレイヤーの管理、プレイヤーの識別、コマンド制御のアイテムの管理、プレイヤーに対する得点の付与、ゲームタイマー、ゲーム回路の制御…挙げればキリがありません。マジで色々な部分に使用しています。このコマンドは本当に無限の可能性を秘めています。

この/scoreboardで設定したオブジェクティブやスコアはターゲットセレクターの引数にすることができます。これをゲーム制作では活用しているというわけです。

 

記述法)

scores={(オブジェクティブ名)=(数値)}

 

※数値は範囲で指定することもできる

  • 「(数値)..」:
    「(数値)以上」
  • 「..(数値)」:
    「(数値)以下」
  • 「(数値1)..(数値2)」:
    「(数値1)以上(数値2)以下」

例1)@p[scores={pNum=1}]

 基準座標から1番近く、「pNum」でのスコアが「1」のプレイヤー

 

例2)@a[scores={pNum=1..8,points=1..}]

 ワールドに存在する全てのプレイヤーの中で、「pNum」でのスコアが「1~8」のいずれかで、かつ「points」でのスコアが「1」以上の全てのプレイヤー

 

ゲームプレイヤーの管理においては、似たような役割を果たすコマンドに /tag もありますが、そちらとの違いやこの /scoreboard の使い道については、コマンド解説応用編で解説していこうと思っています。

 

/scoreboard の弱み・弱点

このコマンドでは記述ミスが失敗扱いになってエラーにならない場合が結構あります。コマンドブロックで実行する場合はコマンドブロックが保存している実行結果をよく確認すると良いでしょう。

 

 

今回解説できたのは/scoreboardの本当に基礎的な部分のみでした。正直この記事を見ただけでは何ができるのかさっぱりわからないと思います。

繰り返しですが、この/scoreboardをどのように使うのかという具体例はコマンド解説応用編で解説します。そちらで何に用いるのか見てからこの記事に戻って来ると、理解が深まると思います。

頑張って更新しますので、是非ご覧下さい。

 

今回のまとめ

  • 『 /scoreboard 』はオブジェクティブを作ってスコアを保存するコマンド!
  • 『objectivesモード』ではオブジェクティブそのものの操作・管理ができる!
  • 『playersモード』ではスコアの操作・管理ができる!

 

関連記事

  • コマンド構文解説-霧を操る…?/fog-
  • コマンド構文解説-エンティティにライド・オン!/ride-

  • コマンド構文解説-モブがアクションを起こす!?/event, /mobevent-
  • コマンド構文解説-あのモブのあのモーションを!?/playanimation-
  • コマンド構文解説-何が起こるんだ!?PART1!/connect ( /wsserver ), /help ( /? ), /kick
  • コマンド構文解説-何が起こるんだ!?PART2!/list, /locate, /schedule-
  • コマンド構文解説-コマンドに革命を起こす…!?/function, /reload-

 

当記事及び当ブログへのご意見・ご質問はいつでも受け付けております。

お気軽にコメント欄までどうぞ!

↓良ければポチッとお願いします。