消えていく床
はじめに
前回、プレイヤーが溶岩の床に触れたらプレイヤーの状態を変化させたけど、今回はプレイヤーが床をふんだら消え始める床を作っていくよ。
準備
前回の続きからつくるなら[移動]と[スケール]をつかって、溶岩の床を長くしよう。今回からつくるなら下の画像を見ながらマネしてみよう。
消えていく床の作成
- パーツを追加して、「FadingPlatform」という名前に変更。
- スクリプトを追加して、「FadeOnTouch」という名前に変更。
- スクリプトを開いて、デフォルトのコード(初めから書かれているコード)を削除。
- FadingPlatformの変数とTouchedイベントに接続された空の関数を作成。
local platform = script.Parent
local function fade()
end
platform.Touched:Connect(fade)
forループ
前々回、whileループをつかって3秒ごとに消えて再び現れる繰り返し処理をやったけど、今回は段階的にプラットフォームの透明度を0→1に変えて消えていくようにしたいんだ。
forループを使うとシンプルに書くことができるよ。
for count = 1(開始), 10(終了), 1(増分)
count変数に1から開始して、増分1(1ずつ増やして)、10になるまで繰り返す。
増分は1なら省略もできるよ。
- fade関数の中に、10回繰り返すforループを作成。
- forループの中に、Transparency(透明度)プロパティにcount変数を10で割り算した値を設定。
- 0.1の時間を待機するwait関数の呼び出し。
local platform = script.Parent
local function fade()
for count = 1, 10 do
platform.Transparency = count / 10
wait(0.1)
end
end
platform.Touched:Connect(fade)
ループが実行されるとcount変数の値が1ずつ増える。すると透明度がcount変数の値を10で割った0.1ずつ増えるようにしてるから、透明度が0.1から1まで増えたときに完全に透明になるってことだね。
ループが終わってプラットフォームが完全に透明になったら、プレイヤーが通り抜けて下に落ちるようにしないといけないね。それからプラットフォームが消えたあと3秒たったら透明度を0にもどして通り抜けないようにしよう。
- forループのあとに、プラットフォームのCanCollideプロパティ(ぶつかるか通り抜けるかの設定)をfalseに設定。
- wait関数を呼び出して3秒待つ。
- プラットフォームのCanCollideプロパティをtrueに戻す。
- プラットフォームのTransparencyプロパティ(透明度)を0に戻す。
local platform = script.Parent
local function fade()
for count = 1, 10 do
platform.Transparency = count / 10
wait(0.1)
end
platform.CanCollide = false
wait(3)
platform.CanCollide = true
platform.Transparency = 0
end
platform.Touched:Connect(fade)
問題点の見直し
プラットフォームのTouchedイベントはプレイヤーのパーツの一部がプラットフォームに触れるときに実行される仕組みだから、このままだとプレイヤーが走ってプラットフォームを移動したらfade関数が何回も呼ばれちゃうんだ。
だからfade関数が呼ばれるのはプレイヤーが初めに触れた1回だけにしないとね。
ブール変数
ブール変数はブール値(trueかfalseのどちらか)しか保存できない変数だよ。
- isTouched(ブール)変数にtrueを設定。
- fade関数の中身の処理は、isTouched変数がtrueのときだけ実行されるようにif文で囲む。
- if文の処理に入ったら、連続で実行されないようにisTouched変数をfalseに変更。
- forループが終わって、プラットフォームの復元まで終わったらisTouched変数をtrueに戻す。
local platform = script.Parent
local isTouched = true
local function fade()
if isTouched then
isTouched = false
for count = 1, 10 do
platform.Transparency = count / 10
wait(0.1)
end
platform.CanCollide = false
wait(3)
platform.CanCollide = true
platform.Transparency = 0
isTouched = true
end
end
platform.Touched:Connect(fade)
こうすることで、プレイヤーの2歩目3歩目に連続で反応しなくなるし、3秒後に戻ってきてもう一度反応させることもできるね。
今回は以上です。お疲れ様でした~。
プラットフォームを増やしたり、幅を変えたりして、難易度を調整してみてね。
以上の手順は↓の英語サイトを日本の小中学生でもわかるように、できるだけやさしく解説してみました。
コメント