Robloxで点滅する罠を作る
2019-04-27

Robloxで点滅する罠を作る

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リファレンス読むようにします。