フェイディングトラップ

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

In 殺傷的な溶岩 では、ユーザーの動作に基づいてコードをトリガーする方法を学びました。このチュートリアルでは、ユーザーが溶岩の上に立ったときにプラットフォームを作成する方法を示しています。

セットアップ

Deadly Lava をフォローすると、ユーザーがジャンプできない溶岩の上にあなたの溶岩プラットフォームを置くことができます。

  1. パーツを挿入し、世界に移動させます。名前は FadingPlatform です。

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

  3. 確認してください アンカード です。

  4. スクリプトを部品に挿入し、FadeOnTouch に名前を変更し、デフォルトコードを削除します。

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


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

プラットフォームをフェイドする

プラットフォームが瞬時に消えると、ユーザーはギャップを渡るのが不可能となり、プラットフォームを使用すること自体が面倒になります。代わりに、プラットフォームはユーザーがジャンプオフに入る前に 消える 必要があります。

この効果を得るために、Transparencyプロパティを変更し、非常に短い時間を繰り返し、あなたはこの効果を得ることができます。しかし、グラデーションフェードは、0から1の間に最大 10 回変更する必要があります。これは 20 行の非常に重複的なコードです。

これは、コードを特定の回数に反復する for ループを使用して、より効率的に達成できます。コードのループは、iteration という名前で知られています。ループのコードは、コマを区切って 3つのことによって定義されています:

  • コントロール変数 - ループをカウントする変数を作成します。この例では、 count ですが、開始値は 1です。
  • 終了値 - ループを停止するために必要な値。この例では、10です。
  • ステップインクリメント (オプション) - コントロール変数に何を追加するかを決定します。如果左側でオフになっている場合、デフォルトで 1 が返されます。このため、この例では必要ありません。

In FadeOnTouch :

  1. 関数で、forループを作成し、1から開始し、10回をイテレートします。

  2. for ループ内で、Transparency プロパティをコントロール変数の 10 に設定します。

  3. 時間が 0.1 の「Library.task.wait()」関数を呼び出します。


    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 秒ごとに 0.1 秒に増加することを意味します。これにより、プラットフォームの完全な透明性が 1 秒後に達成されます。

再起動

プラットフォームが消えた後、ユーザーはそれを通り抜ける必要があります。プラットフォームは、フェイドアウト後に数秒間戻ってくる必要があります - そうしないと、ユーザーはジャンプをもう一度試すことができません。CanCollide プロパティは、ユーザーがパーツを通り抜けることができるかどうかを制御します。

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

  2. ライブラリのタスクを使用して数秒間お待ちください。

  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 で、あなたはユーザーの体部がパーツに接触するたびに 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 then
end
if isTouched == false then
end
if isTouched == nil then
end

デバウンスを切り替える

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

  1. プラットフォームが消える前に、isTouchedtrue 内に設定し、if 文の中にあります。
  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)

それでおしまい!今すぐコードをテストして、ユーザーがジャンプしてから数秒後にプラットフォームが消えることがわかるはずです。

このプラットフォームをワイドギャップで複製して、チャレンジの障害を作成し、速度で継続してバランスを取るために変更できます。

最終コード


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)