2015年9月14日月曜日

【コマンドブロック】scoreboardの使い方(4)「scoreboardの視覚化setdisplay、testforとsay」【マインクラフト】

scoreboardの使い方(4)「scoreboardの視覚化setdisplay、testforとsay」


 今回からいよいよコマンドブロックscoreboard編も本格化していきます。
scoreboardを制作し、エンティティにscoreboard(値)を持たせることを前回行いました。

今回は「scoreboardをみえるようにするには?」です。


スコアボードをみえるようにするにはいくつか方法があります。

setdisplayを使う
testforとsayを使う


まずはsetdisplayを使った方法です。

記法:
/scoreboard objectives setdisplay <list|sidebar|belowName> [スコア名]
記入例:
/scoreboard objectives setdisplay sidebar test

前回作ったtestのスコアをsidberタイプのsetdisplayとして表示させます。
setdisplayは値を持つエンティティがいないときは表示されません。
「0=無い」ではありません。「0≠無い」です。0も値として扱われることに注意してください。
では実際にあなたのtestの値を0にして表示されるかやってみましょう。

記法:
/scoreboard players set <プレイヤー名> <スコア名> <数値> [データタグ]
記入例:
/scoreboard players set @p test 0

setは定めた値をセットできます。addは加えるでした。
このようにマイクラにおけるコマンドは文字通りの意味であることがほとんどです。
では次に「無い」状態にしてみます。

記法:
/scoreboard players reset <プレイヤー名> [スコア名]
記入例:
/scoreboard players reset @p test

resetを使います。
setで0にすることでリセット出来るように思われるかもしれませんが違います。
resetを使うとsetdisplayが非表示になります。これがリセットの状態です。
(setdisplayがリセットされたわけではなく、見えなくなっているだけで存在しています)



もう一つの方法はtestforとsayコマンドを使ったものです。


図のようにコマンドブロックを設定しコマンドを入力します。

向かって左側には
/say 1
向かって右側には
/testfor @p[score_test_min=1]

あらかじめtestのscoreboardを作っておく必要があります。

準備しておくもの
/scoreboard objectives add test dummy

ここでtestforとコンパレーターについて説明しておきます。
testforはコマンドで定めた値がワールド内に存在するかをレッドストーン動力がある時(ボタンをおした時)だけ調べ、その結果をレッドストーン信号にすることが出来ます(一般に、検知するという)。
その信号を得るためにコンパレーターが必要になるというわけです。
この図の場合、testforが検知し、信号をコンパレーターが受信すると、コンパレーターはその信号の強さ1を出力し、コンパレーターの先に繋がれた/say 1が呼びだされる仕組みです。
(testforで検知した際の信号強度は1です)

つまり、testforでワールド内に値があるかを調べ、コンパレーターがそれを受信し信号1を発する。
その信号でsay1 のコマンドを呼び出すと言う流れです。


作られたばかりのtestには値が存在しないため、ボタンを押しても/say 1は呼び出されません。
それにはtestforの中身が重要です。

記法:
/testfor @p 
引数:
score_scoreboardの名前_min 
記入例:
/testfor @p[score_test_min=1]

引数を使ってscoreboardを指定する方法です。
引数については別の記事で取り扱います。今は覚える必要はありません。
スコアを調べるための呪文だと思っていてください。
今回の呪文はtestのscoreboardが1の時だけ検知する呪文です。
testの値が0や2の時は検知しません
それではさっそくscoreboardに値を入れてみましょう。

/scoreboard players set @p test 1

これをチャット欄で入力するとtestの値1がセットされることになり、ボタンを押すとあなたのtestのscoreboardを検知します。


どちらの方法を使ってもscoreがどんな値なのか知ることが出来ます。
testforの場合反応しなければ@pがscoreを持っていないか値がtestforの中身と違う。
そもそもscoreboardが存在しないのいずれか(あるいはスペルミス)です。
setdisplayはワールドに1つしか設定できないため複数のscoreboardを管理するのに不向きです。

使い勝手の良さや時と場合によってscoreboardを視覚化して値を把握できるようになりましょう。
今回は比較的難しかったと思います。わからなかった所はお気軽にコメントしてください。


問題
・testforであなたのtestのscoreboardの値が0を検知することは出来る? 出来ない?
・testforで値0の時だけを検知するようにするにはtestforの引数はどのように設定するか


次:scoreboardの使い方(5)「1~4のまとめ」
前:scoreboardの使い方(3)「Objectives、Players、teamsについて」

0 件のコメント:

フィード