第20回 ~鍵を拾ってドアを開ける~

ツール(Tool)の基本的な仕組みを理解します。ツールボックスにある鍵を使ってドアを開けるというプログラムを作ります。

登場する英単語

Starter Packスターターパック初めから所持するツールはここに入れる
Playersプレイヤーズgame下に位置するオブジェクト、ゲームにいるプレイヤーが入る
PlayerプレイヤーPlayers下に位置するオブジェクト、プレイヤー情報
CharacterキャラクターPlayerのプロパティ、Workspaceに表示されているキャラクターモデルが入る
Backpackバックパックプレイヤーが所持しているツールが入る場所
Handleハンドルツールに存在するパーツ

チェックポイント

  • ツール(Tool)とはプレイヤーが持つことができるアイテムのこと
  • ツールボックスに入っているツールを取得すると「Put this tool into the starter pack?」というメッセージが表示される
  • 「Yes」を選択すると「Starter Pack」に入る
  • ゲーム開始時から所持するツールは「Starter Pack」に入れる
  • 「Starter Pack」に入れられるものは「Tool」というオブジェクトのみ
  • 「No」を選択すると「Workspace」に入る
  • プレイヤーがゲームに入ると「Players」に「Player」追加される
  • さらにプレイヤーのModelは、Workspaceの方にも追加される
  • Playerのプロパティ「Character」に追加されたModelが設定される
  • Playerオブジェクトには、ユーザーIDやキャラクター名などの情報が含まれる
  • Playerの「Backpack」には、装備しているツールが入る
  • ツールを装備すると「Backpack」からアイテムが除外され、キャラクターモデルの中に移動する
  • タッチイベントは何回も呼ばれることが多いので、変数などを利用して制御する
local door = script.Parent
local touch = false

door.Touched:Connect(function(hit)
    local character = hit.Parent
    local humanoid = character:FindFirstChildWhichIsA("Humanoid")

    if humanoid and touch == false then
        local key = character:FindFirstChild("Key")
        if key then
            touch = true
            door.CanCollide = false
            door.Transparency = 1
            wait(1)
            key:Destroy()
            door.CanCollide = true
            door.Transparency = 0
            touch = false
        end
    end
end)
  • 所持するツールは重複しないように、すでに持っているかどうかをチェックする
local keyBox = script.Parent
local clickdetector = keyBox.ClickDetector

local function checkHaveItem(player,item)
    local character = player.Character

    if character:FindFirstChild(item) then
        return true
    end
    if player.Backpack:FindFirstChild(item) then
        return true
    end 
    return false
end

clickdetector.MouseClick:Connect(function(player)
    if checkHaveItem(player,"Key") == false then
        local key = keyBox.Key
        local item = key:Clone()
        item.Parent = player.Backpack
    end
end)

返信を残す