Contents
9. プロパティを徐々に変更 (for文)
繰り返し処理というものを使い、だんだん透明になっていくパーツを作ってみます。
繰り返し処理には大きく分けてふたつの種類があります。
回数が決められた繰り返しと、特定の条件で永久に続く繰り返しです。
まずは回数が決められた繰り返しを使ってみましょう。これはfor文を使用して実現できます。
for 変数 = 初めの値, ゴールの値, 足されていく値 do
-- この中に繰り返されるプログラムを書く
end
ためしに1
から10
までの数を出力するスクリプトを書いてみましょう。

これをこうして…こうかな?
for A = 1, 10, 1 do
task.wait(1)
print(A)
end
定義している変数A
を見ると分かる通り、for文の中で定義する変数には、local
を書く必要がありません。
この変数はfor文の中でしか使えないので注意してください。
繰り返し処理はとても高速に動くので、print関数の前にtask.wait関数を入れ、1秒待ってから出力されるようにしています。
プログラム内部では、以下の順序で動いています。
変数を定義&値が代入される
for文の中に書かれたプログラムが上から順に実行される
足されていく値
を変数
に足して、ゴールの値
より変数
のほうが小さければ、STEP.2にもどる
最終的にゴールの値
よりも変数
のほうが大きくなったら繰り返しが終わる
練習
では実際に、だんだん透明になるパーツを作ってみましょう。
一度ご自身で書いてみて、どうしても分からない場合は以下のスクリプトをご確認ください。
こたえ
local part = workspace.Folder.Part
for count = 0, 1, 0.1 do
task.wait(1)
part.Transparency = count
end
-- 完全に透明になってから、当たり判定をオフにすることもできる
part.CanCollide = false
別の例として、パーツの位置を徐々に移動させるスクリプトもご紹介します。
パーツの位置を徐々に移動
local part = workspace.Folder.Part
for nextY = 0, 10, 1 do
task.wait(1) -- 1秒待つ
-- 位置のデータ型で指定する
-- XとZ軸の位置は0のまま、Y軸の位置だけ徐々に変化させる
local newPosition = Vector3.new(0, nextY, 0)
-- パーツのPositionプロパティに代入する
part.Position = newPosition
end
このスクリプトでは、パーツのY軸 (上下) の位置を徐々に上に移動しています。
プロパティ別データ型の例で紹介した、オブジェクトの位置のデータ型であるVector3
を使用しています。
X軸やZ軸が移動するようにしたり、移動しながら大きさを変えたり出来るので、8. プロパティを数秒後に変更を参考に色々なパーツのプロパティを徐々に変更してみてください。
10. プロパティを規則的に変更 (while文)
回数が決められた繰り返し処理ができるfor文を使い、プロパティを徐々に変更することができました。
ですが、for文では繰り返しが終わるとそこでプロパティの変更が終わってしまいます。
特定の条件で永久に続く繰り返しを使い、ずっとプロパティが変わっていくスクリプトを作ってみましょう。
特定の条件で永久に続く繰り返しは、while文を使用することで実現できます。
while ここにtrueかfalseを入れる do
-- この中に繰り返されるプログラムを書く
end
whileとdoの間にtrue
を入れると無限に繰り返され、反対にfalse
を入れるとこのプログラムは実行されません。
もしfalse
を入れたら何の意味もないプログラムになりますが、次の章で解説する条件文と呼ばれるものを使えば、もっと複雑な繰り返し処理ができるようになります。
以下のスクリプトで、無限にこーんにーちはーと出力されます。
while true do
print("こーんにーちはー")
task.wait()
end
練習
while文の使い方がわかったので、少し難しいですがためしにパーツが徐々に透明になり、徐々に不透明になるのを繰り返すスクリプトを作ってみましょう。
一度ご自身で書いてみて、どうしても分からない場合は以下のスクリプトをご確認ください。
こたえ

スクリプトが長いよ~ 😭
無限に繰り返すwhile文の中に、for文を使って徐々に透明にするプログラムと、反対の徐々に不透明にするプログラムが上から順番に実行されます。
実際にスクリプトを使ってみて、いろいろ値をいじって確認してみてください。
local part = workspace.Folder.Part
while true do
-- 2秒待った後、徐々に透明にする
task.wait(2)
for count = 0, 1, 0.1 do
part.Transparency = count
task.wait(0.1)
end
-- 当たり判定をオフにする
part.CanCollide = false
task.wait(2) -- 2秒待つ
-- 見えるようになる前に当たり判定をオンにする
part.CanCollide = true
for count = 0, 1, 0.1 do
-- 値を減らすことで不透明にするため、引き算をする
part.Transparency = 1 - count
task.wait(0.1)
end
end
11. プロパティを確認 (if文)
スクリプトでは、条件文と呼ばれるものを使って、さまざまな比較をすることができます。
条件文はとてもシンプルなので、ためしに書いてみましょう。
local test = 10 > 5
print(test)
-- 変数にいれなくてもOK
print(10 > 5)
このスクリプトでは、10
が5
よりも大きい数かどうかの比較をして、その結果を出力しています。
条件文の結果はtrue
かfalse
の二通りで、条件文があっていたらtrue
、間違っていたらfalse
です。
>
のように値を比較できる記号のことを、比較演算子と呼びます。
ほかにもさまざまな種類があるので、ためしてみてください。
比較演算子 | 説明 | スクリプト例 (すべて true になる) |
> | 左の数値が右の数値よりも大きい | print( 10 > 5 ) |
< | 左の数値が右の数値よりも小さい | print( 27 < 30 ) |
>= | 左の数値が右の数値以上 | print( 7 >= 4 ) |
<= | 左の数値が右の数値以下 | print( 3 <= 6 ) |
== | 右と左の値が同じ | print( ”やあ” == “やあ” ) |
~= | 右と左の値が違う | print( “え?” ~= “うん” ) |

どれがどれだかわからなくなったら、いつでもこのリンクから確認すればいいんじゃね?知らんけど。
では、ためしに条件文を使ってプロパティの確認をしてみましょう。
if文を使えば、true
だったらこのプログラムを実行し、false
だったらこれを実行するといった条件分岐ができるようになります。
使い方はとてもシンプルで、以下のようにif
とthen
の間にある値がtrue
だったら中のプログラムが実行されます。
if 10 > 5 then
print("10は5よりも大きいよ")
end
これを使って、パーツのプロパティを確認してみましょう。
以下のスクリプトでは、パーツの透明度を確認しています。
local part = workspace.Folder.Part
if part.Transparency == 1 then
print("パーツは透明です")
end
また、if文は以下のようにfalse
だった場合のプログラムも書くことができます。
if 値 then
trueだった場合のプログラム
else
falseだった場合のプログラム
end
これを使えば、パーツが透明か透明でないかの2通りで確認できるようにすることもできます。
local part = workspace.Folder.Part
if part.Transparency == 1 then
print("パーツは透明です")
else
print("パーツは透明ではありません")
end
比較演算子は、先ほど学んだwhile文にも使用できます。
以下の例では、パーツのY軸の位置をゆっくり上に移動させています。 高さが100
を超えたらwhile文の値がfalse
になるので、繰り返し処理が終了します。
local part = workspace.Folder.Part
print("パーツをゆっくり上に移動します!")
-- 繰り返すたびに、whileとdoの間がtrueになるか確認される
while part.Position.Y < 100 do
-- 現在の位置に対して、少しだけy軸を足す
local nextPosition = part.Position + Vector3.new(0, 0.01, 0)
part.Position = nextPosition -- パーツの位置プロパティに代入する
task.wait() -- 1フレーム待つ
end
-- 繰り返し処理が終了したことを出力する
print("パーツのY軸の位置が100を超えました!")
12. 関数の戻り値
すべての関数には、戻り値と呼ばれるものがあります。
戻り値とは、関数の処理が終わった後、関数が渡してくれる結果の値のことです。
task.wait関数の場合は、処理である 指定された時間待つ
が終わると、実際に待った時間が戻り値として返されます。
以下のスクリプトだと、まずtask.wait関数が1秒待った後、実際に待った正確な時間が変数aaa
に代入され、print関数で出力されます。
プログラムは正確に1秒待つことは不可能なので、多少の誤差は出ますが、だいたい数値の1
が出力されるはずです。
local aaa = task.wait(1)
print(aaa)
もう少しわかりやすくするために、実際にプログラムが動く順序を書いておきます。
今回の例では、task.wait関数が1秒待つ
task.wait関数が1秒待ったら、task.wait(1)
と書いたところが戻り値に置きかわる。
このとき、プログラムは以下のように解釈されます。
local aaa = 1
print(aaa)
これにより、変数aaa
には数値の1
が代入され、print関数で変数aaa
の中身が出力されます。
変数と同様に、関数の部分が戻り値におきかわるので、以下のような書き方もできます。
-- 3秒待った後、実際に待った時間を出力する
print( task.wait(3) )
-- 1秒待った後、実際に待った時間に1を足して出力する
print( task.wait(1) + 1 )
print関数など、一見戻り値を返す必要がないような関数も戻り値を返しますが、nil
なので使用する場面はありません。
local yay = print("あ、どうも")
print(yay)
13. ランダムに当たり判定を変更 (math.random関数)
関数の戻り値について知ることができたので、さっそくランダムに当たり判定を変更するスクリプトを書いてみましょう。
Robloxには、ランダムな数値が戻り値として返ってくるmath.random関数があります。
このように、()
の中でランダムな数値の範囲を指定できるようになっています。
local ABAB = math.random(最小の値, 最大の値)
このスクリプトでは、1
から10
までの範囲でランダムな数値が戻り値として変数に代入され、出力されます。
local hey = math.random(1, 10)
print(hey)
練習
この関数を使って、ためしに数秒ごとにランダムにパーツの当たり判定が変わるスクリプトを書いてみましょう。
一度ご自身で書いてみて、どうしても分からない場合は以下のスクリプトをご確認ください。
こたえ
while文を使って2秒ごとに処理を繰り返すようにします。0
か1
のランダムな数値を決めて、それが1
だったら当たり判定をオンにして不透明にし、0
だったら当たり判定をオフにして透明にしています。
このスクリプトでは確率は2分の1ですが、少しスクリプトを変えれば透明になる確率を調整できるので、ためしてみてください。
local part = workspace.Folder.Part
while true do
task.wait(2)
if math.random(0, 1) == 1 then
part.CanCollide = true
part.Transparency = 0
else
part.CanCollide = false
part.Transparency = 1
end
end