剣や銃など、手に持って動作するものをToolと言います。ツール制作はかなり難しいのですが、最も基本的なことだけを書いておきます。

  1. WorkspaceにToolを追加します。
  2. Toolの中にPartを入れます。
  3. Partの名称をHandleに変えます。
  4. ToolをStarterPackに移動します。

これだけでPartがツールになります。ツールを複数のPartで構成したい場合は、それぞれのPartをWeldConstraintで繋げる必要があります。すべてのPartのAnchoredは必ずオフにしてください。

プログラムを書く

Toolには、サーバーで動作するScriptと、クライアントで動作するLocalScriptの2つを使うことができます。下記のプログラムで動作チェックをしてみてください。

  1. ToolにScriptを挿入します。(サーバーで動作するプログラム)
  2. さらに RemoteEventを入れます。(マウスクリックなどでサーバーで処理する場合)
local tool = script.Parent

-- クライアントから、FireServer で呼ばれる
tool.RemoteEvent.OnServerEvent:Connect(function(player,hit)
    print(hit)
end)

-- ツールを装備した状態でマウスダウンで呼ばれる
tool.Activated:Connect(function()
    print("マウスダウン(サーバー)")
end)

-- ツールを装備した状態でマウスアップで呼ばれる
tool.Deactivated:Connect(function()
    print("マウスアップ(サーバー)")
end)

-- ツールを装備したら呼ばれる
tool.Equipped:Connect(function(mouse)
    mouse.Button1Down:Connect(function()  -- ←当然サーバーでは呼ばれません!
        -- マウス操作はクライアントで行うこと
        print(tostring(mouse.Hit.Position).."(サーバー)")
    end)
    print("ツールを装備する(サーバー)")
end)

-- ツールを外したら呼ばれる
tool.Unequipped:Connect(function()
    print("ツールを外す(サーバー)")
end)
  1. ToolにLocalScriptを挿入します。(クライアントで動作するプログラム)
local tool = script.Parent

-- ツールを装備した状態でマウスダウンで呼ばれる
tool.Activated:Connect(function()
    print("マウスダウン(クライアント)")
end)

-- ツールを装備した状態でマウスアップで呼ばれる
tool.Deactivated:Connect(function()
    print("マウスアップ(クライアント)")
end)

-- ツールを装備したら呼ばれる
tool.Equipped:Connect(function(mouse)
    mouse.Button1Down:Connect(function()  -- このイベントはツールを外すと自動的に解除される
        -- サーバーの方で何かしたい場合は、RemoteEvent(FireServer)を使う
        tool.RemoteEvent:FireServer(mouse.Hit)    -- OnServerEvent に接続された関数が呼ばれる
        print((tostring(mouse.Hit).."(クライアント)"))
    end)
    print("ツールを装備する(クライアント)")
end)

-- ツールを外したら呼ばれる
tool.Unequipped:Connect(function()
    print("ツールを外す(クライアント)")
end)

Activated でのマウスクリック処理

上記のサンプルでは、Equipped の中でマウスクリックを処理していましたが、Activated イベントを使用することもできます。Activated イベントは、ツールを装備した状態でクリック(タップ)されると発生するものです。
Button1Down イベントは、パラメータで mouse が渡されましたが、Activated イベントにはそれがないので、player の GetMouse() を使って、mouse 情報を取得する必要があります。mouse のプロパティについては、デバイスからの入力の投稿をご覧ください。

tool.Activated:Connect(function()
    -- Toolを使用しているPlayerのMouseを取得
    local player = game.Players.LocalPlayer
    local mouse = player:GetMouse()

    -- Mouseが指しているパーツを取得
    local clickedPart = mouse.Target

    if clickedPart then
        print("クリックしたパーツ:" .. clickedPart.Name)
    else
        print("パーツがクリックされていない")
    end
end)

バックパックのUIを表示させない方法

バックパックのアイコンは自動的に表示されます。これを表示したくない場合は、StarterGui または、StarterPlayer の StarterPlayerScripts に LocalScript を追加し、下記のプログラムを入れると表示されなくなります。この場合、ツールの装備・非装備は、プログラムで行わなくてはなりませんのでご注意ください。

local CoreGui = game:GetService("StarterGui")
CoreGui:SetCoreGuiEnabled(Enum.CoreGuiType.Backpack, false)

By schilverberch

ROBLOXでゲームを作ろう! 一緒にプログラミングを学びましょう。

4 thoughts on “ツールを作る”
  1. 初めまして。
    質問なのですが、ツールをHandle無しで作るにはどうすれば良いでしょうか。
    他の人のゲームをプレイしていて気になりました。
    ご回答よろしくお願いします。

  2. ご回答ありがとうございます。
    しつこいですが、もう一つ質問させてください。
    「Toolを持つと腕が上がる動作」を無効にすることはできるのでしょうか。

コメントを残す