フェードトラップ

*このコンテンツは、ベータ版のAI(人工知能)を使用して翻訳されており、エラーが含まれている可能性があります。このページを英語で表示するには、 こちら をクリックしてください。

In Deadly Lava, you learned how to trigger code based on user behavior. This tutorial shows you how to make a platform which fades away when a user steps on it.

セットアップ

If you followed Deadly Lava, you can place your fading platform above the lava floor that users can't jump across.

  1. パートを挿入し、ワールド内の所定の位置に移動します。名前を FadingPlatform にします。

  2. ユーザーがジャンプできるようにサイズを変更します。

  3. Anchored に設定されていることを確認します。

  4. パートに Script を挿入し、名前を FadeOnTouch に変更し、デフォルトのコードを削除します。

  5. プラットフォームの変数を作成し、プラットフォームの Touched イベントに接続された空の関数を作成します。

    local platform = script.Parent
    local function fade()
    end
    platform.Touched:Connect(fade)

プラットフォームをフェードさせる

プラットフォームが瞬時に消えると、ユーザーはギャップを越えることができなくなり、全く楽しくありません。代わりに、プラットフォームはユーザーが落ちる前にフェードアウトする必要があります。これにより、ユーザーはジャンプするチャンスを得ることができます。

Transparency プロパティを変更し、非常に短い時間待機することでこの効果を得ることができますが、徐々にフェードさせるには、0から1の間で少なくとも10回の変更が必要です。これは非常に繰り返しの多いコードで20行になります。

これは、特定の回数だけコードを繰り返すforループを使用することで、より効果的に実現できます。コードの各ループはイテレーションとして知られています。forループは、カンマで区切られた3つの要素で定義されます。

  • 制御変数 - ループをカウントするために作成され、使用される変数。この例では count で、開始値は1です。
  • 終了値 - ループが停止するために到達しなければならない値。この例では10です。
  • ステップインクリメント
    OPTIONAL
    - 各ループで制御変数に加算する値を決定します。省略するとデフォルトで1になりますので、この例では不要です。

FadeOnTouch で:

  1. 関数内で、1 から始まる for ループを作成し、10 回繰り返します。

  2. forループ内で、Transparency プロパティを制御変数を 10 で割った値に設定します。

  3. task.wait() 関数を呼び出し、時間を 0.1 に設定します。

    local platform = script.Parent
    local function fade()
    for count = 1, 10 do
    platform.Transparency = count / 10
    task.wait(0.1)
    end
    end
    platform.Touched:Connect(fade)

ループが実行されると、カウントは各イテレーションで1ずつ増加します。これは、プラットフォームの Transparency が0.1ずつ増加し、1秒後に完全に透明になることを意味します。

再出現

プラットフォームが消えた後、ユーザーはそれを通り抜けるべきです。また、プラットフォームはフェードした後、数秒後に戻る必要があります。そうしないと、ユーザーは失敗した場合に再度ジャンプを試みることができません。CanCollideプロパティは、ユーザーがパートを通り抜けることができるかどうかを制御します。

  1. forループの後にプラットフォームの CanCollide プロパティを false に設定します。

  2. task.wait() 関数を使用して数秒待機します。

  3. CanCollide プロパティを true に戻します。

  4. Transparency プロパティを 0 に戻します。

    local platform = script.Parent
    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)

デバウンス変数

In Deadly Lava, you learned that the Touched event runs each time a user's body part comes into contact with the part. This behavior causes issues when a user runs across the fading platform: the function will run multiple times, resetting the loop each time.

For the code to work properly, the function should only run once when the user touches the platform for the first time. Ensuring that an action is only triggered once when it would otherwise be triggered multiple times is known as debouncing.

To debounce a function, a boolean variable can be used to keep track of when the platform has already been touched. Booleans can only contain true and false values. Create a variable called isTouched and set it to false.

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 デバウンス変数がfalseの場合にのみフェード関数内のコードを実行できます。フェード関数の本体を if 文でラップし、条件を not isTouched にします。

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)

Luauの not 演算子は、それに続く値を反転させます。条件的には、最初のif文は以下の文と同じ動作をします。

if not isTouched then
end
if isTouched == false then
end
if isTouched == nil then
end

デバウンスを切り替える

現在、fade 関数内のコードは常に実行されます。なぜなら isTouched がfalseであり、not isTouched がtrueに評価されるからです。デバウンスルーチンを完了するには、2つの場所で変数の値を切り替える必要があります。

  1. フェードが始まる前に、if 文内で isTouchedtrue に設定します。
  2. プラットフォームが再出現した後に 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)

And that's it! Test your code now, and you should find that the platform fades away when the user jumps on it and comes back a few seconds later.

You can duplicate this platform across a wider gap to create a challenging obstacle and change the speed at which they fade to balance the difficulty.

最終コード

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)
©2026 Roblox Corporation。Roblox(ロブロックス)、RobloxロゴおよびPowering Imaginationは、米国並びにその他の国における登録商標および非登録商標です。