Tool
*Este contenido se traduce usando la IA (Beta) y puede contener errores. Para ver esta página en inglés, haz clic en aquí.
Las herramientas son objetos que un objeto Humanoid puede equipar.Para los jugadores, se almacenan en un objeto padre Backpack que pertenece a un objeto Player.En el juego, los jugadores pueden tener múltiples herramientas que aparecen como íconos en la parte inferior de la pantalla.Equipar una herramienta la mueve desde la mochila a un modelo Player.Character en el Workspace.Por defecto, las herramientas se mantienen en la mano derecha y tienen un mango en ellas, que es un Part llamado "Manija" dentro (aunque uno no es requerido si Tool.RequiresHandle está desactivado).Las herramientas que se deben proporcionar a los jugadores que reaparecen deben almacenarse en el StarterPack .
En el equipo de escritorio, presionar una tecla de número (1, 2, 3...) equipará una herramienta.Las herramientas equipadas se pueden dejar caer en el espacio de trabajo presionando Retroceso.Se recomienda que apague Tool.CanBeDropped para que no sea posible soltar una herramienta, morir, reaparecer y soltar nuevamente para duplicar herramientas.En las consolas, los botones LB y RB equiparán herramientas.Puedes desactivar la activación con un clic izquierdo (o gatillo derecho en el controlador para juego) al configurar Tool.ManualActivationOnly en.Hacerlo requiere que llames a Activarte a través de algún tipo de otra entrada de usuario.
Las herramientas no son la única manera de capturar la entrada del usuario.También puedes usar ContextActionService , UserInputService o Player:GetMouse() .Si necesita una herramienta para tener múltiples acciones, como presionar una tecla mientras la herramienta está equipada, debe usar ContextActionService's BindAction y UnbindAction en los eventos Equipped y Unequipped, respectivamente.Usa un LocalScript enviar estas acciones al servidor a través de un RemoteFunction dentro de la herramienta.
Muestras de código
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)
Resumen
Propiedades
Controla si el jugador puede soltar la herramienta.
Se relaciona con si el instrumento se puede o no usar.
Almacena las propiedades de "agarre" de la herramienta como una CFrame .
Representa los valores R02, R12 y R22 de la matriz de rotación de agarre CFrame.
El desplazamiento posicional de la matriz de soldadura del herramienta.
Representa los valores R00, R10 y R20 de la matriz de rotación de agarre CFrame.
Representa los valores R01, R11 y R21 de la matriz de rotación de agarre CFrame.
La propiedad ManualActivationOnly solo controla si el Tool se puede activar sin ejecutar Tool:Activate() .
Determina si una función Tool funciona sin un controlador.
Controla el mensaje que se muestra cuando el mouse del jugador se desplaza sobre la herramienta en su mochila.
El icono de textura que se muestra para una herramienta en la mochila del jugador.
Establece el nivel de detalle en el modelo para experiencias con transmisión de instancias habilitada.
Controla el comportamiento de transmisión de modelos en Models.
La parte principal de la Model , o nil si no se configura explícitamente.
Propiedad solo del editor utilizada para escalar el modelo alrededor de su pivote. Establecer esta propiedad moverá la escala como si se llamara Model/ScaleTo a ella.
Determina dónde se encuentra el eje de un que no tenga un conjunto establecido.
Métodos
Métodos heredados de ModelEstablece este modelo para ser persistente para el jugador especificado. ModelStreamingMode debe establecerse en PersistentPerPlayer para que el comportamiento se cambie como resultado de la adición.
Devuelve una descripción de un volumen que contiene todas las partes de un modelo.
Devuelve el tamaño de la caja de contención más pequeña que contiene todo el BaseParts en el Model, alineada con el Model.PrimaryPart si se establece.
Devuelve todos los objetos Player que este objeto de modelo es persistente para.El comportamiento varía según si este método se llama desde un Script o un LocalScript.
Devuelve la escala canónica del modelo, que se establece por defecto en 1 para los modelos recién creados y cambiará a medida que se escala a través de Model/ScaleTo.
Mueve el PrimaryPart a la posición dada. Si no se ha especificado una parte principal, se usará la parte raíz del modelo.
Hace que este modelo ya no sea persistente para el jugador especificado. ModelStreamingMode debe establecerse en PersistentPerPlayer para que el comportamiento se cambie como resultado de la eliminación.
Establece el factor de escala del modelo, ajustando el tamaño y la ubicación de todas las Instancias descendientes para que tengan ese factor de escala en relación con sus tamaños y ubicaciones iniciales cuando el factor de escala era 1.
Cambia un Model por el desplazamiento dado Vector3, preservando la orientación del modelo.Si otro BasePart o Terrain ya existe en la nueva posición, entonces el Model se superpondrá al objeto dicho.
Obtiene el pivote de un PVInstance .
Transforma el PVInstance junto con todos sus descendientes PVInstances de tal manera que el pivote ahora se encuentra en el punto especificado CFrame.
Eventos
Se activa cuando el jugador hace clic mientras la herramienta está equipada.
Se activa cuando el jugador suelta su clic mientras la herramienta está equipada y activada.
Se enciende cuando la herramienta está equipada.
Se enciende cuando la herramienta no está equipada.
Propiedades
CanBeDropped
La propiedad CanBeDropped controla si el jugador puede soltar el Tool .
Si es verdad, cuando se presiona el botón de retroceso, la herramienta se asignará a Workspace y se eliminará de Backpack del jugador.Si es falso, nada sucederá cuando se presione la barra de retroceso y la herramienta se mantendrá equipada.
Enabled
La propiedad Habilitado se relaciona con si se puede o no usar el Tool.Esto es útil si quieres evitar que un jugador use una herramienta, pero no quieres eliminarla de su Backpack .
Cuando se establece en true, el jugador puede usar la herramienta.Cuando se establece en false , la herramienta está deshabilitada y el jugador no puede usarla; esto impide que la herramienta se active o desactive por los métodos Tool:Activate() y Tool:Deactivate() , y evita que se activen los eventos Tool.Activated y Tool.Deactivated.
Muestras de código
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
La propiedad Grip almacena las propiedades de "agarre" de la herramienta como una sola CFrame.Estas propiedades posicionan cómo el jugador sostiene la herramienta y incluyen GripUp , GripRight , GripForward y GripPos .
Muestras de código
El código a continuación inserta un Tool llamado Palo en el reproductor local Class.BackPack.Cuando el jugador activa la herramienta, el código imprime los valores de las propiedades de agarre de la herramienta.
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) -- Marrón
tool.Activated:Connect(function()
print(tool.Grip)
print(tool.GripUp)
print(tool.GripRight)
print(tool.GripForward)
print(tool.GripPos)
end)
GripForward
Una de las propiedades que especifica la orientación de una herramienta en la mano de un personaje.Esto representa los valores R02, R12 y R22 de la matriz de rotación de agarre CFrame.
Otras propiedades de herramientas que controlan cómo un personaje sostiene una herramienta incluyen Tool.GripUp , Tool.GripRight y Tool.GripPos .Todas estas propiedades se almacenan en una sola CFrame propiedad en la propiedad Tool.Grip.
Muestras de código
El código a continuación inserta un Tool llamado Palo en el reproductor local Class.BackPack.Cuando el jugador activa la herramienta, el código imprime los valores de las propiedades de agarre de la herramienta.
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) -- Marrón
tool.Activated:Connect(function()
print(tool.Grip)
print(tool.GripUp)
print(tool.GripRight)
print(tool.GripForward)
print(tool.GripPos)
end)
GripPos
Esta propiedad controla el desplazamiento posicional de la matriz de soldadura de la herramienta.Es una de varias propiedades que se utilizan para posicionar cómo el personaje del jugador sostiene la herramienta.
Otras propiedades que controlan cómo un personaje sostiene una herramienta incluyen Tool.GripUp , Tool.GripRight y Tool.GripForward .Todas estas propiedades se almacenan en una sola CFrame propiedad en la propiedad Tool.Grip.
Muestras de código
El código a continuación inserta un Tool llamado Palo en el reproductor local Class.BackPack.Cuando el jugador activa la herramienta, el código imprime los valores de las propiedades de agarre de la herramienta.
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) -- Marrón
tool.Activated:Connect(function()
print(tool.Grip)
print(tool.GripUp)
print(tool.GripRight)
print(tool.GripForward)
print(tool.GripPos)
end)
GripRight
Una de las propiedades que especifica la orientación de una herramienta en la mano de un personaje.Esto representa los valores R00, R10 y R20 de la matriz de rotación de agarre CFrame.
Otras propiedades de herramientas que controlan cómo un personaje sostiene una herramienta incluyen Tool.GripUp , Tool.GripForward y Tool.GripPos .Todas estas propiedades se almacenan en una sola CFrame propiedad en la propiedad Tool.Grip.
Muestras de código
El código a continuación inserta un Tool llamado Palo en el reproductor local Class.BackPack.Cuando el jugador activa la herramienta, el código imprime los valores de las propiedades de agarre de la herramienta.
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) -- Marrón
tool.Activated:Connect(function()
print(tool.Grip)
print(tool.GripUp)
print(tool.GripRight)
print(tool.GripForward)
print(tool.GripPos)
end)
GripUp
Una de las propiedades que especifica la orientación de una herramienta en la mano de un personaje.Esto representa los valores R01, R11 y R21 de la matriz de rotación de agarre CFrame.
Otras propiedades de herramientas que controlan cómo un personaje sostiene una herramienta incluyen Tool.GripRight , Tool.GripForward y Tool.GripPos .Todas estas propiedades se almacenan en una sola CFrame propiedad en la propiedad Tool.Grip.
Muestras de código
El código a continuación inserta un Tool llamado Palo en el reproductor local Class.BackPack.Cuando el jugador activa la herramienta, el código imprime los valores de las propiedades de agarre de la herramienta.
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) -- Marrón
tool.Activated:Connect(function()
print(tool.Grip)
print(tool.GripUp)
print(tool.GripRight)
print(tool.GripForward)
print(tool.GripPos)
end)
ManualActivationOnly
La propiedad ManualActivationOnly controla si el Tool se puede activar sin ejecutar explícitamente Tool:Activate() en un script.
Cuando se establece en verdad, la herramienta solo disparará Tool.Activated cuando se llame Tool:Activate(). Esto también suprime la función ContextActionService:BindActivate().
Cuando se establece en falso, los clics del ratón (cuando se equipa la herramienta) también dispararán Tool.Activated .
Muestras de código
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
Esta propiedad determina si una función Tool sin un controlador.
Una herramienta tiene un mango cuando contiene una parte hija llamada Mango .Las herramientas con asas generalmente requieren que el jugador las equipen para sostener un objeto para usarlas, por ejemplo, armas.Las herramientas sin asas generalmente no requieren que el jugador las equipen para sostener algo para usarlas, por ejemplo, herramientas de "vuelo" o de "invocación".
Cuando se establece en true, la herramienta funcionará solo con un controlador. Cuando se establece en false, la herramienta funcionará incluso sin controlador.
ToolTip
La propiedad ToolTip controla el mensaje que se mostrará cuando el jugador pase el mouse sobre el en su .
En general, el valor de esta propiedad debe describir lo que es la herramienta o su uso.Por instancia, para una herramienta de pala, puedes elegir establecer el Tipo de herramienta a:
tool.ToolTip = "Shovel"
or
tool.ToolTip = "Use to dig"
or
tool.ToolTip = "Shovel - Use to dig"
Métodos
Activate
Esta función simula la activación del Tool. La herramienta debe estar equipada para que esta función funcione.
Devuelve
Muestras de código
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
Esta función simula la desactivación del Tool. La herramienta debe estar equipada para que esta función funcione.
Devuelve
Muestras de código
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)
Eventos
Activated
Este evento se activa cuando el jugador hace clic mientras el Tool está equipado.No se dispara si la tecla no está presionada durante el hcer clic.
Este evento se usa típicamente para realizar una acción cuando el jugador usa la herramienta, por ejemplo, para lanzar un cohete desde una arma de lanzamiento de cohetes.
El código a continuación, cuando se coloca en un LocalScript, crea una herramienta en el jugador local Backpack y imprime "Herramienta activada" cuando el jugador hace clic mientras la herramienta creada está equipada.
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
Este evento se activa cuando el jugador lanza su clic mientras el Tool está equipado y activado.Se usa típicamente para realizar una acción cuando el jugador deja de usar una herramienta.
El código a continuación, cuando se coloca en un LocalScript, crea una herramienta en el jugador local Backpack y imprime "Herramienta desactivada" cuando el jugador lanza su clic mientras la herramienta está equipada y activada.
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
Este evento se activa cuando un jugador equipa el Tool (lo saca de su Backpack ).
El opuesto de este evento, Tool.Unequipped , se puede usar para determinar cuándo el jugador desequipa la herramienta al ponerla en su mochila.
Tenga en cuenta que este evento no dispara cuando Tool.RequiresHandle está habilitado y no hay ningún control presente.
Parámetros
El ratóndel jugador.
Muestras de código
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
Este evento se activa cuando un jugador desequipa el Tool (lo pone en su Backpack ).
El opuesto de este evento, Tool.Equipped , se puede usar para determinar cuándo el jugador equipa la herramienta al sacarla de su mochila.
Tenga en cuenta que este evento no dispara cuando Tool.RequiresHandle está habilitado y no hay ningún control presente.