if/then文を使えば、触れたものをすべて破壊するのではなく、プレイヤーのHPを変化させるトラップを作成することができます。RobloxアバターにはHumanoid(ヒューマノイド)と呼ばれるオブジェクトが含まれており、プレイヤーが動き回ったり、プレイヤーのHPを管理したりすることができます。if/then文を使えば、トラップにヒューマノイドのパーツが触れているかを確認することができます。触れていれば、プレイヤーのHPはゼロになります。
パーツとスクリプトを設定する
- トラップのpart(パーツ)を追加し、名前を付けます。
- トラップのパーツに Script(スクリプト)を追加し、名前を付けます。
- スクリプトの親パーツを指定する trap 変数を作成します。
カスタム関数を作成する
トラップのパーツのTouchedイベントに紐づけする関数を作成します。
- パラメータを持つ関数を作成します。この例では、onTouch(関数名) および otherPart (パラメータ)という名前を付けます。
- 関数の中に、パラメータの親オブジェクトを格納する変数を作成します。
- 関数をトラップパーツの Touched と紐づけし、何かが触ったときに実行されるようにします。
Humanoidか確認する
パラメータ otherPart はトラップパーツにタッチするすべてのものを記録します。これは、プレイヤーの場合もBaseplate(ベースプレート)の場合もあります。トラップが Humanoid のみを破壊するようにするため、if/then文を使って otherPart に、Humanoidオブジェクトが含まれるかを確認します。
特定のオブジェクトを探す
関数 FindFirstChildWhichIsA() を使用して特定の種類のオブジェクトを探すことができます。これは、Humanoidタイプのオブジェクトを探すのに便利です。Humanoidが含まれるものを格納するために、変数を使用することができます。
local humanoid = character:FindFirstChildWhichIsA("Humanoid")
ヒューマノイドを探すためif/then文を追加する
if/then文を使用して、先ほど作成した humanoid 変数に何かが格納されているかどうかを調べます。
ヒューマノイドのHPを変化させる
if文が true であれば、Humanoid オブジェクトが格納されていることになりますので、そのオブジェクトのHPを示すプロパティー変数(Health)に0を代入して、プレイヤーのHPを0にします。if文が false であれば、触れたのは Humanoid ではないということになりますので、if文内のコードは実行されません。
- then と end の間に「humanoid.Health = 0」と入力します。
- ゲームをテストします。
完成したコードの例
-- プレイヤーが触れた場合、体力を0にする
-- 変数の設定
local trap = script.Parent
-- trapパーツに触れたら呼ばれる関数
local function onTouch(otherPart)
-- 触れたパーツの親を取得
local character = otherPart.Parent
-- その親の子供の中にHumanoidタイプのオブジェクトが存在するのかを確認
local humanoid = character:FindFirstChildWhichIsA("Humanoid")
if humanoid then
-- もし、Humanoidタイプのオブジェクトが見つかったら、体力を0にする
humanoid.Health = 0
end
end
-- trapパーツにタッチイベントを接続する
trap.Touched:Connect(onTouch)
コードのトラブルシューティング
- すべての変数が一致していることを確認します。すべてのスペル、大文字・小文字は記載の通りにしてください。
- end は2つ必要です。ひとつは if/then 文用、もうひとつは関数用です。
[ 【5】if/then文を使用する ]