Con la tabla de clasificación creada, los jugadores necesitan algo para recolectar. Para eso, necesitas crear un artículo 3D para que los jugadores encuentren en el mundo. A continuación se muestra un video del proceso de recolección de artículos por parte de los jugadores.
Construir un Objeto
Los artículos en la experiencia son modelos 3D que los jugadores usan una herramienta para cosechar. Cada objeto, una vez cosechado, desaparece y luego reaparece después de un tiempo limitado.
Para el objeto, consulte el documento de diseño de su juego. Esta serie usa cristales como ejemplo.
Crea un objeto, ya sea usando partes u objetos encontrados por usuarios de confianza en el Mercado.
Si lo desea, descargue la parte de cristal con este enlace. Para agregarlo, haga clic derecho en el área de trabajo y seleccione Insertar del archivo .
Si está usando su propia parte, agrupe todas las partes en un Modelo . Una forma de hacer esto es seleccionar todos los elementos, hacer clic derecho en una parte y seleccionar Grupo . Esto crea un modelo que organiza sus partes.
Asegúrese de que las partes estén todas ancladas .
Para que los artículos no se puedan cosechar mientras desaparecen, crea un BoolValue llamado CanHarvest para rastrear su estado.
En Propiedades para CanHarvest, marca la caja delimitadora Valor . Marcar la casilla de valor hace que la booleana sea verdadera, lo que significa que los jugadores pueden cosechar el objeto.
Creando una herramienta
Los jugadores necesitan algo como un hacha o una pala para recolectar objetos. En Roblox, los objetos que los jugadores pueden equipar y usar se llaman herramientas . Esta lección usa una herramienta de inicio con todas las partes y una animación ya hecha que puedes personalizar más tarde.
Añadiendo la herramienta
Para que los jugadores puedan usar la herramienta inicial, descárguela y colóquela en el Paquete Inicial.
En el Explorador, bajo Espacio de Trabajo, haga clic derecho en StarterPack. Luego, seleccione Insertar desde Archivo .
Seleccione el archivo descargado, starterTool.rbxm .
Pon a prueba tu proyecto. Los jugadores deben estar equipados con la herramienta tan pronto como iniciar. En el juego, presiona 1 para equipar o desechar la herramienta. Haga clic izquierdo para balancearla.
Codificación de la herramienta
Si la herramienta golpea un objeto cosechable y el jugador tiene suficiente espacio en su bolsa, el número de artículos del jugador aumenta en 1 en la tabla de clasificación. Cosechar un objeto hace que desaparezca por unos segundos y se vuelva no cosechable durante unos segundos antes de reaparecer. Esto anima a los jugadores a explorar para encontrar más artículos, en lugar de solo hacer clic en el mismo artículo.
Configurando el Script
En este punto, agregue un script a la herramienta. Este script maneja lo que sucede cuando la herramienta toca un objeto cosechable.
En StarterPack, en StarterTool, añade un nuevo script llamado ToolScript.
En el script, escribe un comentario descriptivo en la parte superior, y luego crea variables para almacenar la parte de la herramienta y la herramienta en sí.
-- Da a los jugadores un objeto cuando tocan una parte cosechablelocal tool = script.Parentlocal toolPart = tool.Handle
Comprobando objetos
Cuando la herramienta toca un objeto, comprueba si ese objeto tiene CanHarvest dentro y si la booleana está configurada como Verdadera.
Crea una nueva función llamada onTouch() con un parámetro llamado partTouched.
local tool = script.Parentlocal toolPart = tool.Handlelocal function onTouch(partTouched)endEn esa función, crea una variable local llamada canHarvest . Luego, usa la función FindFirstChild() para ver si hay un Boolean de CanHarvest en el padre de esa parte.
local function onTouch(partTouched)local canHarvest = partTouched:FindFirstChild("CanHarvest")endAhora el script necesita verificar si realmente se encontró algo y, si es así, ejecute el código. Para hacer esto, cree una sentencia if donde la condición sea canHarvest. Si existe algo en canHarvest, esta sentencia se evalúa como verdadera.
local function onTouch(partTouched)local canHarvest = partTouched:FindFirstChild("CanHarvest")if canHarvest thenendendEn la sentencia if, añade una sentencia print para ver si el script está funcionando. Puedes codificar la lógica para cosechar elementos después de estar seguro de que funciona.
if canHarvest then-- Usado para probar si el código funcionaprint("Found an item")endBajo la sentencia end de la función, ConnecttoolPart.Touched:Connect(onTouch). Esto permite que el script compruebe si algo está tocando la herramienta (o en este caso, su controlador) y, si es así, llama onTouch().
local function onTouch(partTouched)local canHarvest = partTouched:FindFirstChild("CanHarvest")if canHarvest thenprint("Found an item")endendtoolPart.Touched:Connect(onTouch)Juega el proyecto y usa la herramienta en un objeto cosechable (haga clic izquierdo para balancear). Asegúrese de ver el mensaje "Encontró un objeto" en la ventana de salida.
Consejos para solucionar problemas
Si no ve el mensaje, pruebe los siguientes consejos.
- Si estás usando piezas y mallas personalizadas, es posible que obtengas un error. El script solo funciona si el objeto CanHarvest es un hijo de la parte que está tocando la herramienta.
- Asegúrate de que la herramienta esté en el StarterPack, no en el Workspace.
- Compruebe que la parte esté anclada.
Obteniendo Estadísticas del Jugador
Antes de aumentar los artículos del jugador, la herramienta debe encontrar la ubicación de cuántos artículos tiene un jugador en la tabla de clasificación de ese jugador. Una vez que la herramienta tenga acceso a la tabla de clasificación, puede cambiar el número de artículos de ese jugador.
Primero, busca al jugador usando la herramienta. En el ToolScript, debajo de local item = toolitem, y encima de la función personalizada, introducir:
local item = toolitemlocal backpack = tool.Parentlocal player = backpack.Parentlocal function onTouch(partTouched)En la siguiente línea, encuentra las estadísticas del jugador usando la función FindFirstChild().
local backpack = tool.Parentlocal player = backpack.Parentlocal playerStats = player:FindFirstChild("leaderstats")local function onTouch(partTouched)En local playerStats, crea variables para almacenar las estadísticas de los elementos y espacios.
local playerStats = player:FindFirstChild("leaderstats")local playerItems = playerStats:FindFirstChild("Items")local playerSpaces = playerStats:FindFirstChild("Spaces")
Comprobando si hay un objeto cosechable
Ahora que el script de la herramienta tiene las variables playerItems y playerSpaces creadas, puede comenzar a dar a los jugadores un objeto. Use la función creada para verificar si el objeto que toca la herramienta se puede cosechar y si el jugador tiene suficiente espacio en su bolsa para aumentar los elementos mostrados en la tabla de clasificación en uno.
El script necesitará una sentencia if con dos condiciones que se cumplan. Comience creando una sentencia if, luego agregue en las siguientes condiciones, conectadas con la palabra clave and.
- canHarvest.Value == true
- playerItems.Value < playerSpaces.Value
local function onTouch(partTouched)local canHarvest = partTouched.Parent:FindFirstChild("CanHarvest")if canHarvest thenif canHarvest.Value == true and playerItems.Value < playerSpaces.Value thenendendendEn la propia sentencia if, añade a los artículos del jugador escribiendo playerItems.Value += 1.
if canHarvest thenif canHarvest.Value == true and playerItems.Value < playerSpaces.Value thenplayerItems.Value += 1endendJuega tu proyecto; usa tu herramienta para cosechar un artículo y comprobar que el número de artículos ha aumentado.
Reiniciando el artículo
Cuando el artículo sea cosechado, se reiniciará de dos maneras:
- El artículo desaparecerá y no será interactable
- CanHarvest establecido en falso
El artículo volverá a la normalidad después de un poco de tiempo. De esta manera, los jugadores solo obtienen un artículo por cada cosecha, y necesitan buscar más mientras se restablece el original.
Bajo donde se agregan elementos, configure canHarvest como falso. Al hacer que el valor de canHarvest sea falso tan pronto como los jugadores cosechen el objeto, el script no dará más de un elemento por golpe de herramienta.
if canHarvest thenif canHarvest.Value == true and playerItems.Value < playerSpaces.Value thenplayerItems.Value += 1canHarvest.Value = falseendendDespués de establecer el valor en falso, configure la transparencia de la parte en 1 (invisible) y CanCollide en falso, lo que significa que los jugadores no pueden tocarla.
if canHarvest.Value == true and playerItems.Value < playerSpaces.Value thenplayerItems.Value += 1canHarvest.Value = falsepartTouched.Transparency = 1partTouched.CanCollide = falseendEscriba task.wait(5) para dar tiempo para que el artículo se restablecer. 5 es un número sugerido, y tal vez difiera por cuánto tiempo le gustaría para su experiencia.
if canHarvest.Value == true and playerItems.Value < playerSpaces.Value thenplayerItems.Value += 1canHarvest.Value = falsepartTouched.Transparency = 1partTouched.CanCollide = falsetask.wait(5)endDespués de la espera, haga lo contrario al código anterior, configurando CanHarvest como true y restableciendo la Transparencia y CanCollide a sus valores originales.
task.wait(5)canHarvest.Value = truepartTouched.Transparency = 0partTouched.CanCollide = trueendJuega el proyecto y verificar, comprobar:
- El jugador solo obtiene 1 objeto por cosechar un objeto.
- El objeto desaparece y luego reaparece después de cinco segundos.
Consejos para solucionar problemas
En este punto, si uno de los cheques no pasó, intente uno de los siguientes.
- Comprueba que Transparencia y CanCollide estén escritos con precisión y en mayúsculas.
- Asegúrate de usar canHarvest.Value y no canHarvest = true.
Completa ToolScript
Se puede hacer referencia a una versión terminada del guión a continuación.
local toolPart = script.Parent
local tool = toolPart.Parent
local backpack = tool.Parent
local player = backpack.Parent
local playerStats = player:FindFirstChild("leaderstats")
local playerItems = playerStats:FindFirstChild("Items")
local playerSpaces = playerStats:FindFirstChild("Spaces")
local function onTouch(partTouched)
local canHarvest = partTouched:FindFirstChild("CanHarvest")
if canHarvest then
if canHarvest.Value == true and playerItems.Value < playerSpaces.Value then
playerItems.Value += 1
canHarvest.Value = false
-- Restablecer parteTocada, el objetocosechado
partTouched.Transparency = 1
partTouched.CanCollide = false
task.wait(5)
-- Haz que el artículo cosechado reaparezca y sea utilizable de nuevo
canHarvest.Value = true
partTouched.Transparency = 0
partTouched.CanCollide = true
end
end
end
toolPart.Touched:Connect(onTouch)