Tool
*Nội dung này được dịch bằng AI (Beta) và có thể có lỗi. Để xem trang này bằng tiếng Anh, hãy nhấp vào đây.
Các công cụ là các đối tượng mà một đối tượng Humanoid có thể trang bị.Đối với người chơi, chúng được lưu trong một đối tượng Backpack có cha là một đối tượng Player .Trong trò chơi, người chơi có thể có nhiều công cụ mà xuất hiện như biểu tượng ở dưới cùng của màn hình.Trang bị một công cụ di chuyển nó từ Túi đồ và vào một mô hình Player.Character trong Workspace .Mặc định, các công cụ được giữ trong tay phải và có tay cầm trong đó, đó là một Part được đặt tên là "Tay cầm" bên trong (mặc dù một trong số chúng không cần thiết nếu Tool.RequiresHandle bị tắt).Các công cụ sẽ được cung cấp cho (tái) sinh ra người chơi nên được lưu trong StarterPack .
Trên máy tính, nhấn phím số (1, 2, 3...) sẽ trang bị một công cụ.Các công cụ được trang bị có thể được thả vào Khu vực làm việc bằng cách nhấn Backspace.Khuyến nghị bạn tắt Tool.CanBeDropped để không thể thả công cụ, chết, hồi sinh và thả lại để sao chép công cụ.Trên gamepad, các nút LB và RB sẽ trang bị công cụ.Bạn có thể vô hiệu hóa kích hoạt bằng cách nhấp chuột trái (hoặc kích hoạt bằng nút phải trên gamepad) bằng cách đặt Tool.ManualActivationOnly trên.Làm như vậy yêu cầu bạn gọi Kích hoạt bản thân thông qua một số loại nhập của người dùng khác.
Công cụ không phải là cách duy nhất để thu nhận đầu vào của người dùng.Bạn cũng có thể sử dụng ContextActionService , UserInputService hoặc Player:GetMouse() .Nếu bạn cần một công cụ có nhiều hành động, chẳng hạn như nhấn phím trong khi công cụ được trang bị, bạn nên sử dụng ContextActionService's BindAction và UnbindAction trong các sự kiện Equipped và Unequipped, tương ứng.Sử dụng một LocalScript gửi các hành động này lên máy chủ thông qua một RemoteFunction bên trong Công cụ.
Mẫu mã
This code is meant to be placed in a Script within a Tool. It allows a player to spawn explosions by equipping the tool and clicking on the ground. It does so by defining a function, explode, which creates a non-deadly explosion at a given point. Then, it defines a function, onActivated, that runs when the tool is activated. Finally, it connects the Activated event of the tool to the onActivated function.
To test this code out, try creating a Tool and put a Part inside it. Name the Part "Handle". Put a Script inside the Tool next, and paste the code into it. Finally, put the Tool in the StarterPack.
local tool = script.Parent
local function explode(point)
local e = Instance.new("Explosion")
e.DestroyJointRadiusPercent = 0 -- Make the explosion non-deadly
e.Position = point
e.Parent = workspace
end
local function onActivated()
-- Get the Humanoid that Activated the tool
local human = tool.Parent.Humanoid
-- Call explode with the current point the Humanoid is targetting
explode(human.TargetPoint)
end
tool.Activated:Connect(onActivated)
This code sample is for a Tool object with a Part named Handle. It detects when Humanoids other than the current holder hit the handle, and deals some damage to them. In addition, when the Tool is activated, it triggers a slash animation in the default character animation scripts. Try out this script by creating a Tool object in the StarterPack. Put a Part inside it, and name it Handle. Paste this code into a Script inside the Tool, then try slashing at another Humanoid!
local tool = script.Parent
local function onTouch(partOther)
-- First, try to see if the part we touched was part of a Humanoid
local humanOther = partOther.Parent:FindFirstChild("Humanoid")
-- Ignore touches by non-humanoids
if not humanOther then
return
end
-- Ignore touches by the Humanoid carrying the sword
if humanOther.Parent == tool.Parent then
return
end
humanOther:TakeDamage(5)
end
-- Trigger a slash animation
local function slash()
-- Default character scripts will listen for a "toolanim" StringValue
local value = Instance.new("StringValue")
value.Name = "toolanim"
value.Value = "Slash" -- try also: Lunge
value.Parent = tool
end
tool.Activated:Connect(slash)
tool.Handle.Touched:Connect(onTouch)
Tóm Tắt
Thuộc Tính
Kiểm soát xem người chơi có thể thả công cụ hay không.
Liên quan đến việc công cụ có thể được sử dụng hay không.
Lưu các thuộc tính "grip" của công cụ thành một CFrame .
Biểu diễn các giá trị R02 , R12 và R22 của ma trận quay CFrame .
Chênh lệch vị trí của ma trận hàn của công cụ.
Biểu diễn các giá trị R00 , R10 và R20 của ma trận quay CFrame .
Biểu diễn các giá trị R01 , R11 và R21 của ma trận quay CFrame .
Thuộc tính ManualActivationOnly kiểm soát xem liệu Tool có thể được kích hoạt mà không cần thực hiện Tool:Activate() .
Xác định xem một chức năng Tool có không có tay cầm hay không.
Điều khiển tin nhắn được hiển thị khi chuột của người chơi lượn qua công cụ trong ba lô của họ.
Biểu tượng kết cấu hiển thị cho một công cụ trong ba lô của người chơi.
Đặt cấp độ chi tiết trên mô hình cho các trải nghiệm có bật phát trực tiếp cơ sở dữ liệu.
Kiểm soát hành vi phát trực tiếp mô hình trên Models khi bật phát trực tiếp instancia.
Phần chính của Model , hoặc nil nếu không được cài đặtrõ ràng.
Tính năng chỉ dành cho biên tập viên được sử dụng để mở rộng mô hình xung quanh trục của nó. Việc đặt tính năng này sẽ di chuyển quy mô như thể Model/ScaleTo đã được gọi trên nó.
Xác định nơi mà trục của một Model mà không có không có một bộ Model.PrimaryPart nằm.
Phương Pháp
Phương Pháp kế thừa từ ModelĐặt mô hình này là vĩnh viễn cho người chơi được chỉ định.Model.ModelStreamingMode phải được đặt thành PersistentPerPlayer để hành vi được thay đổi là kết quả của việc thêm.
Trả về một mô tả về một khối lượng chứa tất cả các phần của một mô hình.
Trả về kích thước của hộp gắn kết nhỏ nhất chứa tất cả các BaseParts trong Model, cùng với Model.PrimaryPart nếu nó được cài đặt.
Trả lại tất cả các đối tượng Player được vật phẩm mô hình này lưu trữ.Hành vi thay đổi tùy thuộc vào việc phương pháp này được gọi từ một Script hoặc một LocalScript .
Trả về thước đo chính thống của mô hình, mặc định là 1 cho các mô hình được tạo mới và sẽ thay đổi khi nó được thu nhỏ qua Model/ScaleTo .
Di chuyển PrimaryPart đến vị trí đã cho. Nếu một phần chính chưa được xác định, phần rễ của mô hình sẽ được sử dụng.
Làm cho mô hình này không còn lưu trữ cho người chơi được chỉ định.Model.ModelStreamingMode phải được đặt thành PersistentPerPlayer để hành vi được thay đổi là kết quả của việc loại bỏ.
Đặt yếu tố thước đo của mô hình, điều chỉnh kích thước và vị trí của tất cả các Instances con cháu sao cho có yếu tố thước đo tương đối với kích thước và vị trí ban đầu của chúng khi yếu tố thước đo là 1.
Thay đổi một Model bởi độ trừ Vector3 cho được, giữ nguyên hướng của mô hình.Nếu một BasePart hoặc Terrain đã tồn tại ở vị trí mới thì Model sẽ chồng lên đối tượng đã nói.
Nhận trung tâm của một PVInstance .
Biến đổi PVInstance cùng với tất cả con cháu của nó PVInstances như vậy mà trục trung tâm bây giờ được đặt tại điểm CFrame được chỉ định.
Sự Kiện
Bắt lửa khi người chơi nhấp khi công cụ được trang bị.
Bắt lửa khi người chơi phát hành nhấp chuột trong khi công cụ được trang bị và kích hoạt.
Bắt lửa khi công cụ được trang bị.
Bắt lửa khi công cụ không được trang bị.
Thuộc Tính
CanBeDropped
Thuộc tính CanBeDropped kiểm soát xem người chơi có thể thả Tool hay không.
Nếu đúng, khi nhấn nút lùi, công cụ sẽ được gán cho Workspace và bị xóa khỏi người chơi Backpack .Nếu sai, không có gì xảy ra khi nhấn lại phím lùi và công cụ sẽ vẫn được trang bị.
Enabled
Thuộc tính Bật có liên quan đến việc có hay không có thể sử dụng ToolĐiều này hữu ích nếu bạn muốn ngăn chặn một người chơi sử dụng một công cụ, nhưng không muốn xóa nó khỏi Backpack của họ.
Khi được đặt thành true, người chơi có thể sử dụng công cụ.Khi được đặt thành false , công cụ bị vô hiệu hóa và người chơi không thể sử dụng nó; điều này ngăn chặn công cụ không được kích hoạt hoặc vô hiệu hóa bởi các phương pháp Tool:Activate() và Tool:Deactivate() , và ngăn chặn các sự kiện Tool.Activated và Tool.Deactivated không bắt lửa.
Mẫu mã
The code sample below creates Tool in the local player's Backpack that increases their JumpPower from 50 to 150 for 5 seconds.
This example uses the tool's Tool.Enabled property as a debounce by setting the property to true when the player jumps and back to false after the 5 second duration.
Unequipping the tool also stops the player from super jumping by changing the JumpPower back to 50.
local Players = game:GetService("Players")
local player = Players.LocalPlayer
local character = player.Character or player.CharacterAdded:Wait()
local humanoid = character:WaitForChild("Humanoid")
local tool = Instance.new("Tool")
tool.Name = "SuperJump"
tool.RequiresHandle = false
tool.Parent = player.Backpack
function toolActivated()
humanoid.JumpPower = 150
tool.Enabled = false
task.wait(5)
tool.Enabled = true
humanoid.JumpPower = 50
end
tool.Activated:Connect(toolActivated)
tool.Unequipped:Connect(function()
humanoid.JumpPower = 50
end)
Grip
Thuộc tính Grip lưu các thuộc tính "grip" của công cụ dưới dạng một CFrame duy nhất.Các thuộc tính này xác định vị trí mà người chơi giữ công cụ và bao gồm GripUp , GripRight , GripForward , và GripPos .
Mẫu mã
The code below insert's a Tool named Stick into the local player's Class.BackPack. When the player activates the tool, the code prints the values of the tool's grip properties.
local Players = game:GetService("Players")
local player = Players.LocalPlayer
local tool = Instance.new("Tool")
tool.Name = "Stick"
tool.Parent = player.Backpack
local handle = Instance.new("Part")
handle.Name = "Handle"
handle.Parent = tool
handle.Size = Vector3.new(0.1, 3, 0.1)
handle.Color = Color3.fromRGB(108, 88, 75) -- Brown
tool.Activated:Connect(function()
print(tool.Grip)
print(tool.GripUp)
print(tool.GripRight)
print(tool.GripForward)
print(tool.GripPos)
end)
GripForward
Một trong những thuộc tính xác định hướng của công cụ trong tay của một nhân vật.Điều này đại diện cho giá trị R02 , R12 và R22 của ma trận vị trí quay CFrame .
Các thuộc tính công cụ khác kiểm soát cách một nhân vật giữ một công cụ bao gồm Tool.GripUp , Tool.GripRight , và Tool.GripPos .Tất cả các thuộc tính này được lưu trong một đơn vị CFrame duy nhất trong thuộc tính Tool.Grip.
Mẫu mã
The code below insert's a Tool named Stick into the local player's Class.BackPack. When the player activates the tool, the code prints the values of the tool's grip properties.
local Players = game:GetService("Players")
local player = Players.LocalPlayer
local tool = Instance.new("Tool")
tool.Name = "Stick"
tool.Parent = player.Backpack
local handle = Instance.new("Part")
handle.Name = "Handle"
handle.Parent = tool
handle.Size = Vector3.new(0.1, 3, 0.1)
handle.Color = Color3.fromRGB(108, 88, 75) -- Brown
tool.Activated:Connect(function()
print(tool.Grip)
print(tool.GripUp)
print(tool.GripRight)
print(tool.GripForward)
print(tool.GripPos)
end)
GripPos
Tính chất này kiểm soát sự chênh lệch vị trí của ma trận hàn của công cụ.Nó là một trong nhiều tính năng được sử dụng để xác định vị trí mà nhân vật người chơi giữ công cụ.
Các thuộc tính khác kiểm soát cách một nhân vật giữ công cụ bao gồm Tool.GripUp , Tool.GripRight , và Tool.GripForward .Tất cả các thuộc tính này được lưu trong một đơn vị CFrame duy nhất trong thuộc tính Tool.Grip.
Mẫu mã
The code below insert's a Tool named Stick into the local player's Class.BackPack. When the player activates the tool, the code prints the values of the tool's grip properties.
local Players = game:GetService("Players")
local player = Players.LocalPlayer
local tool = Instance.new("Tool")
tool.Name = "Stick"
tool.Parent = player.Backpack
local handle = Instance.new("Part")
handle.Name = "Handle"
handle.Parent = tool
handle.Size = Vector3.new(0.1, 3, 0.1)
handle.Color = Color3.fromRGB(108, 88, 75) -- Brown
tool.Activated:Connect(function()
print(tool.Grip)
print(tool.GripUp)
print(tool.GripRight)
print(tool.GripForward)
print(tool.GripPos)
end)
GripRight
Một trong những thuộc tính xác định hướng của công cụ trong tay của một nhân vật.Điều này đại diện cho giá trị R00 , R10 và R20 của ma trận vị trí quay CFrame .
Các thuộc tính công cụ khác kiểm soát cách một nhân vật giữ một công cụ bao gồm Tool.GripUp , Tool.GripForward , và Tool.GripPos .Tất cả các thuộc tính này được lưu trong một đơn vị CFrame duy nhất trong thuộc tính Tool.Grip.
Mẫu mã
The code below insert's a Tool named Stick into the local player's Class.BackPack. When the player activates the tool, the code prints the values of the tool's grip properties.
local Players = game:GetService("Players")
local player = Players.LocalPlayer
local tool = Instance.new("Tool")
tool.Name = "Stick"
tool.Parent = player.Backpack
local handle = Instance.new("Part")
handle.Name = "Handle"
handle.Parent = tool
handle.Size = Vector3.new(0.1, 3, 0.1)
handle.Color = Color3.fromRGB(108, 88, 75) -- Brown
tool.Activated:Connect(function()
print(tool.Grip)
print(tool.GripUp)
print(tool.GripRight)
print(tool.GripForward)
print(tool.GripPos)
end)
GripUp
Một trong những thuộc tính xác định hướng của công cụ trong tay của một nhân vật.Điều này đại diện cho giá trị R01 , R11 và R21 của ma trận vị trí quay CFrame .
Các thuộc tính công cụ khác kiểm soát cách một nhân vật giữ một công cụ bao gồm Tool.GripRight , Tool.GripForward , và Tool.GripPos .Tất cả các thuộc tính này được lưu trong một đơn vị CFrame duy nhất trong thuộc tính Tool.Grip.
Mẫu mã
The code below insert's a Tool named Stick into the local player's Class.BackPack. When the player activates the tool, the code prints the values of the tool's grip properties.
local Players = game:GetService("Players")
local player = Players.LocalPlayer
local tool = Instance.new("Tool")
tool.Name = "Stick"
tool.Parent = player.Backpack
local handle = Instance.new("Part")
handle.Name = "Handle"
handle.Parent = tool
handle.Size = Vector3.new(0.1, 3, 0.1)
handle.Color = Color3.fromRGB(108, 88, 75) -- Brown
tool.Activated:Connect(function()
print(tool.Grip)
print(tool.GripUp)
print(tool.GripRight)
print(tool.GripForward)
print(tool.GripPos)
end)
ManualActivationOnly
Thuộc tính ManualActivationOnly kiểm soát xem Tool có thể được kích hoạt mà không cần thực thi Tool:Activate() trong một kịch bản hay không.
Khi được đặt thành true, công cụ sẽ chỉ bắn Tool.Activated khi Tool:Activate() được gọi. Điều này cũng làm giảm chức năng ContextActionService:BindActivate().
Khi được đặt thành false, nhấp chuột (khi công cụ được trang bị) cũng sẽ bắn ra Tool.Activated .
Mẫu mã
The code sample below creates Tool in the local player's Backpack that increases their WalkSpeed from 16 to 30 for 5 seconds.
This example uses the tool's Tool.ManualActivationOnly property as a debounce by setting the property to true when the player begins sprinting and to false when the player stops sprinting. As a result, when the player is sprinting, the tool cannot be re-activated.
Unequipping the tool also stops the player from sprinting by changing the WalkSpeed to 16.
local Players = game:GetService("Players")
local player = Players.LocalPlayer
local character = player.Character or player.CharacterAdded:Wait()
local humanoid = character:WaitForChild("Humanoid")
local tool = Instance.new("Tool")
tool.Name = "Sprint"
tool.RequiresHandle = false
tool.Parent = player:WaitForChild("Backpack")
function toolActivated()
humanoid.WalkSpeed = 30
tool.ManualActivationOnly = true
task.wait(5)
tool.ManualActivationOnly = false
humanoid.WalkSpeed = 16
end
tool.Activated:Connect(toolActivated)
tool.Unequipped:Connect(function()
humanoid.WalkSpeed = 16
end)
RequiresHandle
Tính chất này xác định xem một chức năng Tool không có tay cầm có được hay không.
Một công cụ có tay cầm khi nó chứa một phần con có tên là Tay cầm .Các công cụ có tay cầm thường yêu cầu người chơi trang bị chúng để giữ một vật để sử dụng chúng, ví dụ như vũ khí.Các công cụ không có tay cầm thường không yêu cầu người chơi trang bị chúng để giữ bất cứ thứ gì để sử dụng chúng, ví dụ như công cụ "bay" hoặc "gọi".
Khi được đặt thành true , công cụ sẽ chỉ hoạt động với một tay cầm. Khi được đặt thành false , công cụ sẽ hoạt động ngay cả không có tay cầm.
ToolTip
Thuộc tính ToolTip kiểm soát tin nhắn sẽ được hiển thị khi người chơi đi qua Mouse vùng Tool của họ trong Backpack .
Nói chung, giá trị của thuộc tính này nên mô tả những gì công cụ là hoặc sử dụng của nó.Ví ví dụ / trường hợp, đối với công cụ xẻ, bạn có thể chọn đặt ToolTip thành:
tool.ToolTip = "Shovel"
or
tool.ToolTip = "Use to dig"
or
tool.ToolTip = "Shovel - Use to dig"
Phương Pháp
Activate
Chức năng này mô phỏng kích hoạt của Tool . Công cụ phải được trang bị để chức năng này hoạt động.
Lợi Nhuận
Mẫu mã
The code below creates a Tool in the local player's Backpack that turns the player invisible when activated and visible when deactivated.
When equipped, the script simulates the tool being activated and turns the player invisible for 3 seconds and then simulates the tool being deactivated. Holding the left mouse button down turns the player invisible for up to 3 seconds, with a cooldown period of 1 second, or until the player releases their left mouse button.
local Players = game:GetService("Players")
local player = Players.LocalPlayer
local character = player.Character
local tool = Instance.new("Tool")
tool.Name = "Invisibility Tool"
tool.RequiresHandle = false
tool.Parent = player.Backpack
local invisible = false
local function toolActivated()
if invisible then
return
end
invisible = true
for _, bodypart in pairs(character:GetChildren()) do
if bodypart:IsA("MeshPart") or bodypart:IsA("Part") then
bodypart.Transparency = 1
end
end
task.wait(3)
tool:Deactivate()
task.wait(1)
invisible = false
end
local function toolDeactivated()
if not invisible then
return
end
for _, bodypart in pairs(character:GetChildren()) do
if bodypart.Name ~= "HumanoidRootPart" then
if bodypart:IsA("MeshPart") or bodypart:IsA("Part") then
bodypart.Transparency = 0
end
end
end
end
local function toolEquipped()
tool:Activate()
end
tool.Equipped:Connect(toolEquipped)
tool.Activated:Connect(toolActivated)
tool.Deactivated:Connect(toolDeactivated)
tool.Unequipped:Connect(toolDeactivated)
Deactivate
Chức năng này mô phỏng vô hiệu hóa của Tool . Công cụ phải được trang bị để chức năng này hoạt động.
Lợi Nhuận
Mẫu mã
The code below creates a Tool in the local player's Backpack that turns the player invisible when activated and visible when deactivated.
When equipped, the script simulates the tool being activated and turns the player invisible for 3 seconds and then simulates the tool being deactivated. Holding the left mouse button down turns the player invisible for up to 3 seconds, with a cooldown period of 1 second, or until the player releases their left mouse button.
local Players = game:GetService("Players")
local player = Players.LocalPlayer
local character = player.Character
local tool = Instance.new("Tool")
tool.Name = "Invisibility Tool"
tool.RequiresHandle = false
tool.Parent = player.Backpack
local invisible = false
local function toolActivated()
if invisible then
return
end
invisible = true
for _, bodypart in pairs(character:GetChildren()) do
if bodypart:IsA("MeshPart") or bodypart:IsA("Part") then
bodypart.Transparency = 1
end
end
task.wait(3)
tool:Deactivate()
task.wait(1)
invisible = false
end
local function toolDeactivated()
if not invisible then
return
end
for _, bodypart in pairs(character:GetChildren()) do
if bodypart.Name ~= "HumanoidRootPart" then
if bodypart:IsA("MeshPart") or bodypart:IsA("Part") then
bodypart.Transparency = 0
end
end
end
end
local function toolEquipped()
tool:Activate()
end
tool.Equipped:Connect(toolEquipped)
tool.Activated:Connect(toolActivated)
tool.Deactivated:Connect(toolDeactivated)
tool.Unequipped:Connect(toolDeactivated)
Sự Kiện
Activated
Sự kiện này bắt lửa khi người chơi nhấp khi Tool được trang bị.Nó không không bị bắn nếu phím Ctrl được nhấn trong lúc nhấp chuột.
Sự kiện này thường được sử dụng để thực hiện một hành động khi người chơi sử dụng công cụ, ví dụ để khởi động tên lửa từ một công cụ khởi chạy tên lửa.
Mã mãđây, khi được đặt vào một LocalScript , tạo một công cụ trong Backpack của người chơi địa phương và in "Công cụ đã kích hoạt" khi người chơi nhấp khi công cụ được tạo đang được trang bị.
local Players = game:GetService("Players")
local tool = Instance.new("Tool")
tool.RequiresHandle = false
tool.Parent = Players.LocalPlayer.Backpack
function onActivation()
print("Tool activated")
end
tool.Activated:Connect(onActivation)
Deactivated
Sự kiện này bắt lửa khi người chơi phát hành nhấp của họ trong khi Tool được trang bị và kích hoạt.Nó thường được sử dụng để thực hiện một hành động khi người chơi ngừng sử dụng công cụ.
Mã mãđây, khi được đặt vào một LocalScript , tạo một công cụ trong địa điểm người chơi Backpack và in "Công cụ bị vô hiệu hóa" khi người chơi phát hành nhấp chuột trong khi công cụ được trang bị và kích hoạt.
local Players = game:GetService("Players")
local tool = Instance.new("Tool")
tool.RequiresHandle = false
tool.Parent = Players.LocalPlayer.Backpack
function toolDeactivated()
print("Tool deactivated")
end
tool.Deactivated:Connect(toolDeactivated)
Equipped
Sự kiện này bắt lửa khi một người chơi trang bị Tool (lấy nó ra khỏi Backpack của họ).
Ngược lại với sự kiện này, Tool.Unequipped , có thể được sử dụng để xác định khi nào người chơi bỏ công cụ bằng cách đặt nó vào ba lô của họ.
Lưu ý rằng sự kiện này không không bắt lửa khi Tool.RequiresHandle được bật và không có tay cầm xuất hiện.
Tham Số
chuộtcủa người chơi.
Mẫu mã
The example shown below will print "A tool was equipped" each time the tool is equipped by the player. Please note that the below example assumes that you've already defined what "Tool" is.
local Tool = script.Parent
local function onEquipped(_mouse)
print("The tool was equipped")
end
Tool.Equipped:Connect(onEquipped)
Unequipped
Sự kiện này bắt lửa khi một người chơi bỏ trang bị (đặt nó vào trong của họ) ).
Ngược lại với sự kiện này, Tool.Equipped , có thể được sử dụng để xác định khi nào người chơi trang bị công cụ bằng cách lấy nó ra khỏi ba lô của họ.
Lưu ý rằng sự kiện này không không bắt lửa khi Tool.RequiresHandle được bật và không có tay cầm xuất hiện.