3-3 if/then の練習ーパワーアップ

パワーアップは、プレイヤーに飛行や透明化、スピードアップなどの特別な能力を与えます。プレイヤーが一時的に俊足になるためのパーツ(パワーアップ)を作成するために、if/thenステートメントは、パワーアップパーツに触れたオブジェクトがプレイヤーであるかどうか、さらに、まだパワーアップが実施されていないかどうかをチェックする必要があります。

パワーアップの設定

俊足になるパワーアップは、この機能を必要とするすべてのゲームで利用できます。

パーツとスクリプトの作成

パーツにパワーアップしそうな演出を施すとより効果的です。

  1. 「SpeedBoost」という名前の新しいパーツを作成し、「PowerupScript」という名前のスクリプトを挿入します。
  1. 1行目のprint文を削除し、このプログラムを説明するコメントを追加します。次に、SpeedBoost にアクセスしやすいように、powerupPart変数を作成し、パーツを入れておきます。
-- 触れると一時的にスピードが上がるプログラム
local powerupPart = script.Parent

タッチイベントの作成

プレイヤーがその部分に触れるたびに、プレイヤーに速度ブーストが適用されます。

  1. onTouchという名前の関数を作成し、print ステートメントを含めます。ここでは、速度を上げるためのコードを追加する前に、print ステートメントでテストします。
local function onTouch(otherPart)
    print("Something touched the part")
end
print文を入れることで、イベントが呼ばれているのかが確認できます。多くのプログラマーは、一度にすべてをコーディングするのではなく、このように少しずつ動作確認をしながら進めていきます。これにより早い段階でエラーを発見することができるのです。
  1. 関数の後に、パーツのタッチイベントにonTouch()関数を接続します。
local function onTouch(otherPart)
    print("Something touched the part")
end

powerupPart.Touched:Connect(onTouch)
  1. テスト実行して、パーツに触れたときに出力ウィンドウにメッセージが表示されることを確認します。

Humanoidの保管

何かが触れていることをパーツが認識したので、スクリプトはそれがプレーヤーかどうかを確認する必要があります。これを行うには、FindFirstChildWhichIsA()関数を使用して、プレイヤーを表すオブジェクトであるHumanoidがあるかどうかを確認します。絶命のプログラムが役に立つことでしょう。絶命の代わりに俊足になるというだけですから。

Humanoidオブジェクトは、Roblox のプレイヤーのためにさまざまな情報を保存しています。属性の1つはWalkSpeed(歩行速度)で、この値を変更することで、歩くスピードが変わります。
  1. onTouch 関数では、print 文の下に、「 local character = otherPart.Parent」と入力します。キャラクターモデルの取得です。
local function onTouch(otherPart)
    print("Something touched the part")
    local character = otherPart.Parent

end
  1. 次の行に「local humanoid = character:FindFirstChildWhichIsA(“Humanoid”)」と入力して、キャラクターモデルの子供の中にあるHumanoidオブジェクトを取得します。(ないかもしれません)
local function onTouch(otherPart)
    print("Something touched the part")
    local character = otherPart.Parent
    local humanoid = character:FindFirstChildWhichIsA("Humanoid")
end

スピードブーストの作成

パワーアップは、まだ俊足状態になっていない人にのみ与えられるべきです。それを確認するには、 if ステートメントを使用する必要があります。そのステートメントは、プレーヤーがその部分に触れたかどうか、およびプレーヤーが通常の速度で歩いているかどうかを確認する必要があります。

  1. 引き続き onTouch() 関数で、「if humanoid and humanoid.WalkSpeed <= 16 then」と入力します。
    2つの条件を確認したい場合は「and」を使用します。これは「そして」や「しかも」という意味です。つまり、『もし、humanoid にオブジェクトが入っていて、しかも、humanoid の WalkSpped が16以下であった場合に実行する』という意味になります。もし、humanoidが空だった場合、WalkSppedというプロパティは存在しないので、エラーになりプログラムが停止します。
local function onTouch(otherPart)
    print("Something touched the part")
    local character = otherPart.Parent
    local humanoid = character:FindFirstChildWhichIsA("Humanoid")

    if humanoid and humanoid.WalkSpeed <= 16 then
    end
end
WalkSpeed は、プレイヤーのキャラクターがゲーム内で移動する速さを制御します。初期値は 16 です。StarterPlayer の CharacterWalkSpeed の値になります。
  1. if ステートメントで、humanoid.WalkSpeedを 16 ~ 100 の数値に変更します。
local function onTouch(otherPart)
    print("Something touched the part")
    local character = otherPart.Parent
    local humanoid = character:FindFirstChildWhichIsA("Humanoid")

    if humanoid and humanoid.WalkSpeed <= 16 then
        humanoid.WalkSpeed = 60
    end
end
  1. 次の行で、パワーアップ部分を破棄します。
if humanoid and humanoid.WalkSpeed <= 16 then
    humanoid.WalkSpeed = 60
    powerupPart:Destroy()
end
  1. 数秒後にプレーヤーを通常の速度に戻します。これを行うには、「wait(2)」と入力します。ここで、括弧内の数字は秒数で、この例では2秒間俊足状態になるということです。ちなみに「wait(2.5)」などと小数点も使用できますので覚えておきましょう。最後に WalkSpeed を 16 に戻します。
  if humanoid and humanoid.WalkSpeed <= 16 then
      humanoid.WalkSpeed = 60
      powerupPart:Destroy()
      wait(2)
      humanoid.WalkSpeed = 16
  end
  1. テスト実行します。プレイヤーの速度が上がり、2 秒後に通常の歩行速度に戻ります。

トラブルシューティング

速度ブーストが意図したとおりに機能しない場合は、次のいずれかを試してください。

  • 歩行速度が 10 から 100 の間であることを確認します。そうでない場合、予期しないエラーが発生する可能性があります。
  • プレーヤーの速度を切り替える間にwait()関数があることを確認してください。そうでない場合、2 つの変更は瞬時に行われ、何も起こらなかったように見えます。

完成したプログラム

local powerupPart = script.Parent

local function onTouch(otherPart)
    print("Something touched the part")
    local character = otherPart.Parent
    local humanoid = character:FindFirstChildWhichIsA("Humanoid")

    if humanoid and humanoid.WalkSpeed <= 16 then
        humanoid.WalkSpeed = 60
        powerupPart:Destroy()
        wait(2)
        humanoid.WalkSpeed = 16
    end
end

powerupPart.Touched:Connect(onTouch)

コメントを残す