剣や銃など、手に持って動作するものをToolと言います。ツール制作はかなり難しいのですが、最も基本的なことだけを書いておきます。
- WorkspaceにToolを追加します。
- Toolの中にPartを入れます。
- Partの名称をHandleに変えます。
- ToolをStarterPackに移動します。
これだけでPartがツールになります。ツールを複数のPartで構成したい場合は、それぞれのPartをWeldConstraintで繋げる必要があります。すべてのPartのAnchoredは必ずオフにしてください。
プログラムを書く
Toolには、サーバーで動作するScriptと、クライアントで動作するLocalScriptの2つを使うことができます。下記のプログラムで動作チェックをしてみてください。
- ToolにScriptを挿入します。(サーバーで動作するプログラム)
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()
-- サーバーでは呼ばれません!
print(tostring(mouse.Hit.Position).."(サーバー)")
end)
print("ツールを装備する(サーバー)")
end)
-- ツールを外したら呼ばれる
tool.Unequipped:Connect(function()
print("ツールを外す(サーバー)")
end)
- 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)を使う
print((tostring(mouse.Hit.Position).."(クライアント)")
end)
print("ツールを装備する(クライアント)")
end)
-- ツールを外したら呼ばれる
tool.Unequipped:Connect(function()
print("ツールを外す(クライアント)")
end)
バックパックのUIを表示させない方法
バックパックのアイコンは自動的に表示されます。これを表示したくない場合は、StarterGui または、StarterPlayer の StarterPlayerScripts に LocalScript を追加し、下記のプログラムを入れると表示されなくなります。この場合、ツールの装備・非装備は、プログラムで行わなくてはなりませんのでご注意ください。
local CoreGui = game:GetService("StarterGui")
CoreGui:SetCoreGuiEnabled(Enum.CoreGuiType.Backpack, false)
初めまして。
質問なのですが、ツールをHandle無しで作るにはどうすれば良いでしょうか。
他の人のゲームをプレイしていて気になりました。
ご回答よろしくお願いします。
Handleなしだとイベントが発生しないようですね。
HandleのTransparencyを1にして、透明にしてはどうでしょうか。
ご回答ありがとうございます。
しつこいですが、もう一つ質問させてください。
「Toolを持つと腕が上がる動作」を無効にすることはできるのでしょうか。
こちらの動画が参考になると思いますのでお試しください。
https://www.youtube.com/watch?v=opRJ0Jm_dNc