前の章で少しだけ while ループが登場しましたが、この章ではさらに詳細に学びます。繰り返し実行することができるのが while ループです。永遠に繰り返すこともできますし、条件が一致する間、ループするということもできます。前回行ったものは、永遠に色が変化するというものでしたね。
パーツとスクリプトの設定
いつものように Baseplate のみのテンプレートを開いてください。
- パーツを1つ追加し、名前を LoopingPart とします。
- ServerScriptServiceで、 LoopingScript という名前の新しいスクリプトを追加します。
- 1行目の print 文を削除し、次のようなコメントを入れます。
-- 数秒ごとにLoopingPartの色を変更する
変数を使用してパーツを保存する
変数は文字列や数値の他、オブジェクトも入れることができます。
game.Workspace.NameOfYourPart と何度も入力する代わりに、その行全体を変数に入れ格納すればプログラムも見やすくなります。
変数の前に「local」とするのはローカル変数という意味です。ローカル変数とは内部的な変数という意味で、このスクリプト内でしかアクセスできない変数ということです。ただし local と付けなくても、外部からアクセスする手立てがないので、暗黙的にローカル変数になります。昔のRobloxでは、local と付けなくてもエラーにならなかったのですが、現在は付けないとエラーになりますので、必ず local と指定するようにしましょう。
- コメントの下に「local loopingPart」と入力してローカル変数を作成します。
-- 数秒ごとにLoopingPartの色を変更する
local loopingPart
- 同じ行に「= workspace.loopingPart」と入力して、対象となるパーツを変数に代入します。
-- 数秒ごとにLoopingPartの色を変更する
local loopingPart = workspace.LoopingPart
「=」演算子は、その右側にあるものを左の変数に代入するということに注意してください。
While ループ
while ループには 3 つの要素で構成されます。
- while キーワード
- while の右に指定する条件式
- do キーワードと end キーワードの間の命令
条件式は、if ステートメントで指定できるものがそのまま使用できます。if 文では、条件が真になった場合に、実行されましたが、while でも全く同じで、条件が真でなっている間、繰り返し実行されるということです。
以下のサンプルでは、条件が true であることに注意してください。つまり、常に「真」になるということですから、このループは永久に実行されます。後のレッスンでは、特定の条件を使ってみます。
while true do
print("This loop is running")
end
このプログラムを実行するとフリーズしてしまうでしょう。これはループ内に wait() がないために起こるものです。wait() は指定した時間待つというだけではなく、Robloxシステムに制御を戻すという働きもあります。
While ループのコーディング
それでは、色を変更する処理を while ループ内に記述してみよう。
- while で始まり、「true do」と入力します。 Enter キーを押すとオートコンプリート機能が働き、自動的に end が追加されると思います。追加されなかった場合は end と入力してください。
-- 数秒ごとにLoopingPartの色を変更する
local loopingPart = workspace.LoopingPart
-- ループするコード
while true do
end
エディタが自動的にスクリプトに end を追加し、次のコード行をインデントしたことに気付いたかもしれません。インデントにより、コードが読みやすくなります。ループ内の命令は常にインデントした方がベストです。
ループにコードを追加する
無限ループの準備は整いました。後はループ内に色を変更するプログラムを記述するだけです。ループ内に、色を設定するコードを追加します。前の章で登場した Color3.fromRGB() を使用します。
- while true do と endの間で、パーツの Color プロパティに、Color3.fromRGB() を使って値を設定します。
local loopingPart = workspace.LoopingPart
while true do
loopingPart.Color = Color3.fromRGB()
end
- 色の設定は、Roblox Studio のカラー ピッカーを使用して行うことができます。これを行うには、Color3.fromRGB() の () 内をクリックします。次に、カラーピッカーをクリックします。目的の色が決まったら、[OK] を押します。これで自動的にR、G、Bのパラメータが設定されますのでとても便利です。
local loopingPart = workspace.LoopingPart
while true do
loopingPart.Color = Color3.fromRGB(82, 227, 255)
end
必要に応じて、0 ~ 255 の各数値に値を割り当てて、手動で色を作成することもできます。
スクリプトを待機させる
今すぐ色を変更するコードの 2 行目を追加すると、レンガの色が非常に速く変化するため、最初の色が通り過ぎてしまうことさえ見られない可能性があります。次のコード行を実行する前にスクリプトを待機させるには、task.wait() 関数を使用します。
関数は、事前にプログラムされたコードの塊です。プログラマーは、すべてのコードをもう一度入力する必要はなく、関数をショートカットのように使用できます。プログラマーはショートカットが大好きです。Hello World は print() という関数を使用しました。
色を追加する
色を変化されるには最低2つの色が必要になります。また色を変えた後は少し待つ必要があります。task.wait() を使って3秒待ってから、別の色に変えましょう。
- task.wait(3) と入力し、別の色を設定し、再度 task.wait(3) と入力します。
下記のプログラムでは、水色が3秒表示し、紫が3秒表示するということになります。
while true do
loopingPart.Color = Color3.fromRGB(82, 227, 255)
task.wait(3)
loopingPart.Color = Color3.fromRGB(177, 52, 255)
task.wait(3)
end
さらに別の色を追加したい場合は、end の上に挿入します。このプログラムは無限ループになっていますので、end の下にプログラムを記述しても実行されることはありません。
- テスト実行して、色が変わるかどうかを確認します。
トラブルシューティング
この時点で色が意図した通りに変わらない場合は、次のいずれかを試してください。
問題: 色がスキップされる
- wait() 関数の場所は、Color 代入後になっていますか?
- while true do と end の間に Color への代入と、wait() 関数がありますか?
問題: パーツが灰色のままか、意図した通りに色が変わらない
- Color3.fromRGB() 内の数値は 0 ~ 255 の間で、整数で指定されていますか? カンマで区切られていますか? 数字やカンマは半角文字になっていますか?
- wait の () 内の数値は 1 以上になっていますか? 待ち時間が短すぎると、その色が見えない可能性があります。
完成したプログラム
-- 数秒ごとにLoopingPartの色を変更する
local loopingPart = workspace.LoopingPart
-- ループするコード
while true do
-- loopingPart の色を変える
loopingPart.Color = Color3.fromRGB(82, 227, 255)
-- 3秒待って次の色を変える
task.wait(3)
loopingPart.Color = Color3.fromRGB(177, 52, 255)
task.wait(3)
end