パワーアップは、空を飛んだり、見えなくなったりといった特殊能力をプレイヤーに与えます。非常に速く歩けるようにするスピードブーストのパワーアップを作成するには、スピードブーストに触れたのがプレイヤーであるかどうかと、すでにパワーアップされていないかどうかをif/then文で確認する必要があります。
スクリプトを設定する
スクリプトとパーツを作成する
- SpeedBoost という名前の新しいパーツを作成して、スクリプトを挿入します。
- スクリプトに名前を付け、スクリプトの目的を説明するコメントを作成します。
- 新しい変数を作成します。 local speedBoost = script.Parent
Touchedイベントを確認する
- print文を含む onTouch という名前の関数を作成します。
print関数によるデバッグ
関数内にprint文を追加することは、コードが動作しているかどうかをチェックする良い方法です。メッセージが表示されないということは、そのメッセージを表示しているprint文が実行されていないということになります。つまり、その前のどこかでコードが停止していることが分かり、潜在的なエラーが見つけやすくなります。
- 関数の外に speedBoost.Touched:Connect(onTouch) と入力します。
Run(実行)をクリックして、SpeedBoost に触ったときに、printのメッセージがOutputウィンドウに表示されることを確認します。
パーツにタッチしている他のもの
コードを実行すると、いくつかのprintメッセージが表示されていることに気づくかもしれません。これは、SpeedBoostが他のパーツや地形など、すでに何かに触れている可能性があるからです。プレイヤーがSpeedBoostの上を歩くたびに、printメッセージが表示されると思います。
ヒューマノイドを格納する
これでパーツに何かが触れていることを検知できるようになりました。次にそれが Humanoid(ヒューマノイド)なのかを確認するために FindFirstChildWhichIsA() 関数を使用します。ヒューマノイドがパーツに触ると、humanoid変数にそのオブジェクトが格納されます。
- local character = otherPart.Parent と入力します。
- local humanoid = character:FindFirstChildWichIsA(“Humanoid”) と入力します。
この時点でコードは次のようになっているはずです。
-- 一時的にスピードを上げる
local speedBoost = script.Parent
local function onTouch(otherPart)
-- 触れたパーツの親の中からHumanoidタイプのオブジェクトを探す
local character = otherPart.Parent
local humanoid = character:FindFirstChildWhichIsA("Humanoid")
-- デバッグ用メッセージ
print("Something touched speedBoost")
end
speedBoost.Touched:Connect(onTouch)
スピードブーストを作成する
スピードパワーアップを実行する前に、以下の2つの条件が両方とも true であることを確認する必要があります。
- speedBoost にタッチしているオブジェクトには Humanoid が含まれている。
- Humanoidオブジェクトの WalkSpeed は 16 である。
WalkSpeed はプレイヤーのキャラクターがゲーム内で移動する速度をコントロールします。通常の値は 16 です。両方の条件を同時に確認するには、キーワード and を使用します。
- 条件 humanoid and humanoid.Walkspeed <= 16 の if/then 文を作成します。
- if/then 文内のコードが実行されることを確認するためにprint文を作成します。
- Run(実行)をクリックしてコードを確認します。
Humanoid プロパティ – WalkSpeed
print 文のメッセージが表示されない場合は、end が2つあるかどうかを確認してください。ひとつは if/then 文の end、もうひとつは関数の end です。
-- 一時的にスピードを上げる
local speedBoost = script.Parent
local function onTouch(otherPart)
-- 触れたパーツの親の中からHumanoidタイプのオブジェクトを探す
local character = otherPart.Parent
local humanoid = character:FindFirstChildWhichIsA("Humanoid")
-- デバッグ用メッセージ
print("Something touched speedBoost")
-- Humanoidタイプのオブジェクトで、速度が16以下の場合ブースト
if humanoid and humanoid.WalkSpeed <= 16 then
print("Humanoid touched speedBoost")
end
end
speedBoost.Touched:Connect(onTouch)
WalkSpeedを設定する
if/then が機能するようになったので、次に humanoid の WalkSpeed プロパティを変更します。
if/then 文で、
- humanoid.WalkSpeed を 16~100 の数字に変更します。
= と == の違い
WalkSpeed の値を設定するには必ず = を使用してください。 == は if/then 文で2つの値を比較するときに使用します。
- 次の行で wait(2) と入力します。これはスピードブーストが継続する秒数になります。ここでは 2 としましたが、( ) 内は数字であれば何を使用しても構いません。(数字が入っている変数でも可)
- WalkSpeed を開始値である 16 に戻します。
- テストプレイします。プレイヤーはスピードブーストに触れた瞬間に足が速くなり、2秒後に通常の歩く速度に戻ります。
完成したコードの例
-- 一時的にスピードを上げる
local speedBoost = script.Parent
local function onTouch(otherPart)
-- 触れたパーツの親の中からHumanoidタイプのオブジェクトを探す
local character = otherPart.Parent
local humanoid = character:FindFirstChildWhichIsA ("Humanoid")
-- デバッグ用メッセージ
print("Something touched speedBoost")
-- Humanoidタイプのオブジェクトで、速度が16以下の場合ブースト
if humanoid and humanoid.WalkSpeed <= 16 then
print("A humanoid touched speedBoost")
-- スピードアップ
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)
コードのトラブルシューティング
- Walkspeed が 10~ 100 の数字であることを確認します。それ以外の数字だと、予期しないエラーが発生する可能性があります。
- プレイヤーのスピードを切り換える wait() 関数があることを確認します。これがないと、2つの変化は瞬間的なものとなり、何も起きていないように見えます。
[ 【8】関数から値を返す ]