【7】if/then文(パワーアップ)

パワーアップは、空を飛んだり、見えなくなったりといった特殊能力をプレイヤーに与えます。非常に速く歩けるようにするスピードブーストのパワーアップを作成するには、スピードブーストに触れたのがプレイヤーであるかどうかと、すでにパワーアップされていないかどうかをif/then文で確認する必要があります。

スクリプトを設定する

スクリプトとパーツを作成する

  1. SpeedBoost という名前の新しいパーツを作成して、スクリプトを挿入します。
  2. スクリプトに名前を付け、スクリプトの目的を説明するコメントを作成します。
  3. 新しい変数を作成します。 local speedBoost = script.Parent

Touchedイベントを確認する

  1. print文を含む onTouch という名前の関数を作成します。

print関数によるデバッグ
関数内にprint文を追加することは、コードが動作しているかどうかをチェックする良い方法です。メッセージが表示されないということは、そのメッセージを表示しているprint文が実行されていないということになります。つまり、その前のどこかでコードが停止していることが分かり、潜在的なエラーが見つけやすくなります。

  1. 関数の外に speedBoost.Touched:Connect(onTouch) と入力します。

Run(実行)をクリックして、SpeedBoost に触ったときに、printのメッセージがOutputウィンドウに表示されることを確認します。

パーツにタッチしている他のもの
コードを実行すると、いくつかのprintメッセージが表示されていることに気づくかもしれません。これは、SpeedBoostが他のパーツや地形など、すでに何かに触れている可能性があるからです。プレイヤーがSpeedBoostの上を歩くたびに、printメッセージが表示されると思います。

ヒューマノイドを格納する

これでパーツに何かが触れていることを検知できるようになりました。次にそれが Humanoid(ヒューマノイド)なのかを確認するために FindFirstChildWhichIsA() 関数を使用します。ヒューマノイドがパーツに触ると、humanoid変数にそのオブジェクトが格納されます。

  1. local character = otherPart.Parent と入力します。
  2. local humanoid = character:FindFirstChildWichIsA(“Humanoid”) と入力します。

この時点でコードは次のようになっているはずです。

-- Gives temporary speed boost
 
local speedBoost = script.Parent
 
local function onTouch(otherPart)
-- Looks for a humanoid and stores it
    local character = otherPart.Parent
    local humanoid = character:FindFirstChildWhichIsA("Humanoid")
 
    -- Print statement for debugging
    print("Something touched speedBoost")
 end
 
speedBoost.Touched:Connect(onTouch)

スピードブーストを作成する

スピードパワーアップを実行する前に、以下の2つの条件が両方とも true であることを確認する必要があります。

  • speedBoost にタッチしているオブジェクトには Humanoid が含まれている。
  • Humanoidオブジェクトの WalkSpeed16 である。

WalkSpeed はプレイヤーのキャラクターがゲーム内で移動する速度をコントロールします。通常の値は 16 です。両方の条件を同時に確認するには、キーワード and を使用します。

  1. 条件 humanoid and humanoid.Walkspeed <= 16if/then 文を作成します。
  1. if/then 文内のコードが実行されることを確認するためにprint文を作成します。
  1. Run(実行)をクリックしてコードを確認します。

Humanoid プロパティ – WalkSpeed
print 文のメッセージが表示されない場合は、end が2つあるかどうかを確認してください。ひとつは if/then 文の end、もうひとつは関数の end です。

-- Gives a temporary speed boost
 
local speedBoost = script.Parent
 
local function onTouch(otherPart)
-- Looks for a humanoid and stores it
    local character = otherPart.Parent
    local humanoid = character:FindFirstChildWhichIsA("Humanoid")
 
    -- Print statement for debugging
    print("Something touched speedBoost")
 
    -- Checks for Humanoid without speed boost
    if humanoid and humanoid.WalkSpeed <= 16 then
        print("Humanoid touched speedBoost")
    end 
 end
 
speedBoost.Touched:Connect(onTouch)

WalkSpeedを設定する

if/then が機能するようになったので、次に humanoidWalkSpeed プロパティを変更します。
if/then 文で、

  1. humanoid.WalkSpeed16~100 の数字に変更します。

= と == の違い
WalkSpeed の値を設定するには必ず = を使用してください。 ==if/then 文で2つの値を比較するときに使用します。

  1. 次の行で wait(2) と入力します。これはスピードブーストが継続する秒数になります。ここでは としましたが、( ) 内は数字であれば何を使用しても構いません。(数字が入っている変数でも可)
  2. WalkSpeed を開始値である 16 に戻します。
  1. テストプレイします。プレイヤーはスピードブーストに触れた瞬間に足が速くなり、2秒後に通常の歩く速度に戻ります。

完成したコードの例

-- Gives temporary speed boost
local speedBoost = script.Parent
local function onTouch(otherPart)
-- Looks for a humanoid and stores it
    local character = otherPart.Parent
    local humanoid = character:FindFirstChildWhichIsA ("Humanoid")
    -- Print statement for debugging
    print("Something touched speedBoost")
    -- Checks for Humanoid without speed boost	
    if humanoid and humanoid.WalkSpeed <= 16 then
        print("A humanoid touched speedBoost")
        -- Change to faster speed, wait, then change to normal
        humanoid.WalkSpeed = 50
        print("Player is moving super fast")
        wait(2)
        humanoid.WalkSpeed = 16 
        print("Player is back at normal speed")
    end 
end
speedBoost.Touched:Connect(onTouch)

コードのトラブルシューティング

  • Walkspeed10~ 100 の数字であることを確認します。それ以外の数字だと、予期しないエラーが発生する可能性があります。
  • プレイヤーのスピードを切り換える wait() 関数があることを確認します。これがないと、2つの変化は瞬間的なものとなり、何も起きていないように見えます。

返信を残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です