In 殺傷的な溶岩 では、ユーザーの動作に基づいてコードをトリガーする方法を学びました。このチュートリアルでは、ユーザーが溶岩の上に立ったときにプラットフォームを作成する方法を示しています。
セットアップ
Deadly Lava をフォローすると、ユーザーがジャンプできない溶岩の上にあなたの溶岩プラットフォームを置くことができます。
パーツを挿入し、世界に移動させます。名前は FadingPlatform です。
ユーザーがジャンプできるようにサイズを変更します。
確認してください アンカード です。
スクリプトを部品に挿入し、FadeOnTouch に名前を変更し、デフォルトコードを削除します。
プラットフォームの Touched イベントに接続された空の関数を変数として作成します。
local platform = script.Parentlocal function fade()endplatform.Touched:Connect(fade)
プラットフォームをフェイドする
プラットフォームが瞬時に消えると、ユーザーはギャップを渡るのが不可能となり、プラットフォームを使用すること自体が面倒になります。代わりに、プラットフォームはユーザーがジャンプオフに入る前に 消える 必要があります。
この効果を得るために、Transparencyプロパティを変更し、非常に短い時間を繰り返し、あなたはこの効果を得ることができます。しかし、グラデーションフェードは、0から1の間に最大 10 回変更する必要があります。これは 20 行の非常に重複的なコードです。
これは、コードを特定の回数に反復する for ループを使用して、より効率的に達成できます。コードのループは、iteration という名前で知られています。ループのコードは、コマを区切って 3つのことによって定義されています:
- コントロール変数 - ループをカウントする変数を作成します。この例では、 count ですが、開始値は 1です。
- 終了値 - ループを停止するために必要な値。この例では、10です。
- ステップインクリメント (オプション) - コントロール変数に何を追加するかを決定します。如果左側でオフになっている場合、デフォルトで 1 が返されます。このため、この例では必要ありません。
In FadeOnTouch :
関数で、forループを作成し、1から開始し、10回をイテレートします。
for ループ内で、Transparency プロパティをコントロール変数の 10 に設定します。
時間が 0.1 の「Library.task.wait()」関数を呼び出します。
local platform = script.Parentlocal function fade()for count = 1, 10 doplatform.Transparency = count / 10task.wait(0.1)endendplatform.Touched:Connect(fade)
ループが実行されると、各イテレーションでカウントが 1 増加します。これは、プラットフォームの Transparency が 0.1 秒ごとに 0.1 秒に増加することを意味します。これにより、プラットフォームの完全な透明性が 1 秒後に達成されます。
再起動
プラットフォームが消えた後、ユーザーはそれを通り抜ける必要があります。プラットフォームは、フェイドアウト後に数秒間戻ってくる必要があります - そうしないと、ユーザーはジャンプをもう一度試すことができません。CanCollide プロパティは、ユーザーがパーツを通り抜けることができるかどうかを制御します。
プラットフォームの CanCollide プロパティを false 後に設定します。
ライブラリのタスクを使用して数秒間お待ちください。
CanCollide プロパティを true に戻します。
Transparency プロパティを 0 に戻します。
local platform = script.Parentlocal function fade()for count = 1, 10 doplatform.Transparency = count / 10task.wait(0.1)endplatform.CanCollide = falsetask.wait(3)platform.CanCollide = trueplatform.Transparency = 0endplatform.Touched:Connect(fade)
変数を非バウンス
In Deadly Lava で、あなたはユーザーの体部がパーツに接触するたびに Touched イベントが実行されることを学びました。この動作は、ユーザーがフェードアウトプラットフォームを横切るときに問題が発生します:機能は複数回実行され、ループをリセットするたびに再起動されます。
コードが適切に動作するには、関数はユーザーがプラットフォームを最初に触ったときのみ実行する必要があります。ユーザーがプラットフォームを最初に触ったときにのみアクションがトリガーされることを「 デバウンス 」と知ります。
関数をデバウンスするには、 Boolean 変数を使用して、プラットフォームがすでにタッチされたときに追跡できます。Booleans は 真 および 偽 の値のみを含めることができます。Create a variable called 2> isTouched2> と set it to 5> force</
local platform = script.Parent
local isTouched = false
local function fade()
for count = 1, 10 do
platform.Transparency = count / 10
task.wait(0.1)
end
platform.CanCollide = false
task.wait(3)
platform.CanCollide = true
platform.Transparency = 0
end
platform.Touched:Connect(fade)
変数をチェック中
if 文は、isTouched デバウンス変数が偽である場合にのみフェイド関数のコードを実行することができます。フェイド関数のボディを if コンディションでラップして、not isTouched の状態で、1> if1> 文を使用します。
local platform = script.Parent
local isTouched = false
local function fade()
if not isTouched then
for count = 1, 10 do
platform.Transparency = count / 10
task.wait(0.1)
end
platform.CanCollide = false
task.wait(3)
platform.CanCollide = true
platform.Transparency = 0
end
end
platform.Touched:Connect(fade)
Lua not オペレータは、次の値をリバースします。コンディショナルな場規約、これは、最初の if 文がフォローのステートメントと同じように動作することを意味します。
if not isTouched thenendif isTouched == false thenendif isTouched == nil thenend
デバウンスを切り替える
現在、fade 関数のコードは常に実行されますが、isTouched は偽であり、not isTouched は真で評価されます。デバウンスルーチンを完了するには、変数の値を 2 つの場所で切り替える必要があります。
- プラットフォームが消える前に、isTouched を true 内に設定し、if 文の中にあります。
- プラットフォームが再び表示されたときにfalse に戻します。
local function fade()
if not isTouched then
isTouched = true
for count = 1, 10 do
platform.Transparency = count / 10
task.wait(0.1)
end
platform.CanCollide = false
task.wait(3)
platform.CanCollide = true
platform.Transparency = 0
isTouched = false
end
end
platform.Touched:Connect(fade)
それでおしまい!今すぐコードをテストして、ユーザーがジャンプしてから数秒後にプラットフォームが消えることがわかるはずです。
このプラットフォームをワイドギャップで複製して、チャレンジの障害を作成し、速度で継続してバランスを取るために変更できます。
最終コード
local platform = script.Parent
local isTouched = false
local function fade()
if not isTouched then
isTouched = true
for count = 1, 10 do
platform.Transparency = count / 10
task.wait(0.1)
end
platform.CanCollide = false
task.wait(3)
platform.CanCollide = true
platform.Transparency = 0
isTouched = false
end
end
platform.Touched:Connect(fade)