Cover image for Robloxで点滅する罠を作る
robloxロブロックス

Robloxで点滅する罠を作る

April 26, 2019

5 min read

mitsuruogMitsuru Ogawa

Roblox で罠を作る方法です。 「罠」とは Roblox ゲームの中でよく出てくるもので、これにプレイヤーが触れるとプレイヤーは死にます。

今回の罠は「レーザー」にします。

通常のレーザーの作り方と、点滅するレーザーの作り方を紹介します。

レーザーを作成する

通常の罠の作り方は至ってシンプルです。Roblox の公式ページにチュートリアルがあるので、その通りやってみれば作れると思います。

コードが次のようなものになります。Laserという Part を作成して、その中に Script を作成してください。

local Laser = script.Parent

local function onPartTouch(otherPart)
  local touchObject = otherPart.Parent
  local humanoid = touchObject:FindFirstChildWhichIsA("Humanoid")
  if humanoid then
    humanoid.Health = 0
  end
end

Laser.Touched:Connect(onPartTouch)

Laser.Touchedのイベントハンドラの中で、触れたものがプレイヤー(Humanoid)である場合、Healthを 0 にします。 これが基本的な罠の作成方法です。

レーザーを点滅させる

ではレーザーを点滅させてみましょう。

レーザーを点滅させるにはwhileループを作成して、この中でLaser.Transparencyを使い、レーザーを見えたり隠れたりします。

local Laser = script.Parent

...

Laser.Touched:Connect(onPartTouch)

while true do
  Laser.Transparency = 1
  wait(3)
  Laser.Transparency = 0
  wait(3)
end

Laser.Touchedwhileループの後ろに移動しないでください。whileループは無限ループとなるため、ループの後ろのコードは実行されません。

今回は 3 秒間隔で点滅するようにしました。 ただし、今のままではレーザーが消灯している場合も作動してしまい、プレヤーが触れると死んでしまいます。

うーん。なんでだろう。。。

レーザーが点灯している時だけ罠が作動するようにする

レーザーが点灯している時だけ罠が作動するようにするためには、まず消灯時にレーザーとプレーヤーが衝突しないようにする必要があります。

Laser.CanCollideを使って、レーザーが消灯時にはプレイヤーが触れても通り抜けるようにする必要があります。CanCollide = falseにした場合、プレイヤーが触れても通り抜けるようになります。

local Laser = script.Parent

...

Laser.Touched:Connect(onPartTouch)

while true do
  Laser.Transparency = 1
  Laser.CanCollide = false
  wait(3)
  Laser.Transparency = 0
  Laser.CanCollide = true
  wait(3)
end

CanCollide = falseにした場合、Part の位置を固定しないと、ゲームの世界から落下して見えなくなってしまいます。 プロパティウィンドウから Part のAnchoredのチェックを付けておいてください。

しかし、このままではまだレーザーが消灯時にも罠が作動しています。 これはLaser.TouchedイベントがLaser.CanCollide = falseの場合でも発火してしまうためです。

これを避けるためには、イベントハンドラの中でレーザーのCanCollideの状態を判定して、点灯中の場合のみ作動させる必要があります。 これでレーザーは配置された場所から動かなくなります。

local Laser = script.Parent

local function onPartTouch(otherPart)
  -- 点灯中のみ罠が作動するようにする
  if Laser.CanCollide == true then
    local touchObject = otherPart.Parent
    local humanoid = touchObject:FindFirstChildWhichIsA("Humanoid")
    if humanoid then
      humanoid.Health = 0
    end
  end
end

Laser.Touched:Connect(onPartTouch)

...

これで罠が完成しました。

まとめ

通常の罠の作り方と、点滅する罠の作り方でした。 少しカスタマイズしようとすると途端にわからなくなりますが、Roblox の公式サイトの API リファレンスはかなり親切に書いてあるので、こまったら API リファレンス読むようにします。