Questo progetto userà le dichiarazioni condizionali per creare una parte che darà o sottrarà punti a una classifica a seconda del colore della parte quando toccata. Se blu, allora darà ai giocatori alcuni punti. Se verde, allora darà un sacco di punti. Infine, se rosso, allora prenderà via punti.
Configurazione del progetto
Il punto che fornisce parte può essere aggiunto a qualsiasi progetto in cui i punti sono rilevanti. Ad esempio, un gioco avventuriero in cui i giocatori raccolgono punti.
Tracciamento dei punti
Per configurare questo progetto, avrai bisogno di una classifica per tracciare i punti e una parte che cambia colore. Il codice per la classifica sarà fornito.
Crea uno script nuovo in ServerScriptService chiamato Leaderboard. Copia e pasta il codice seguente nello script.
--In ServerScriptService, crea uno script chiamato PlayerSetup con i contenuti seguenti.local Players = game:GetService("Players")local function onPlayerJoin(player)local leaderstats = Instance.new("Folder")leaderstats.Name = "leaderstats"leaderstats.Parent = player-- Esempio di un IntValuelocal points = Instance.new("IntValue")points.Name = "Points"points.Value = 0points.Parent = leaderstatsend-- Esegui onPlayerJoin quando si attiva l'evento PlayerAddedPlayers.PlayerAdded:Connect(onPlayerJoin)
Parte che cambia colore
Lo script attraverserà tre colori diversi per la parte. Ogni colore avrà un valore RGB variabile, un tipo di dati che include un insieme di tre numeri (rosso, verde, blu) che creano colori.
Crea una parte chiamata PointPart con uno script allegato chiamato PointScript.
In PointScript, usa script.Parent per fare riferimento alla parte.
local pointPart = script.ParentCrea variabili per memorizzare i colori diversi. Ogni variabile dovrebbe essere impostato su Color3.fromRGB() , che crea un valore di colore.
- Blu (Alcuni punti): (0, 0, 255)
- Verde (Molti Punti): (0, 255, 0)
- Rosso (Perdere Punti): (255, 0, 0)
local pointPart = script.Parent-- Colorilocal blue = Color3.fromRGB(0, 0, 255)local green = Color3.fromRGB(0, 255, 0)local red = Color3.fromRGB(255, 0, 0)Aggiungi variabili per un piccolo numero di punti, un maggiore numero di punti e un terzo per rimuovere i punti.
-- Colorilocal blue = Color3.fromRGB(0, 0, 255)local green = Color3.fromRGB(0, 255, 0)local red = Color3.fromRGB(255, 0, 0)-- Valori dei puntilocal smallPoints = 10local largePoints = 50local losePoints = 100
Aggiungere il servizio dei giocatori
Per assegnare punti, dovrai ottenere l'accesso alle informazioni del Giocatoreche è archiviato nell'Explorer sotto Players, e è separato dal personaggio oggetto. Questo è dove informazioni come le statistiche di classifica possono essere trovate.
Puoi farlo aggiungendo il servizio Giocatori al tuo script. I Servizi sono set aggiuntivi di funzioni pre-costruite fatte dagli ingegneri Roblox per risparmiare tempo.
Ottieni il servizio Giocatori digitando:
local Players = game:GetService("Players")
-- Valori dei puntilocal smallPoints = 10local largePoints = 50local losePoints = 100-- Servizi richiestilocal Players = game:GetService("Players")
Funzioni e eventi
PointsScript avrà due funzioni. La prima funzione darà e sottrarà parti. La seconda funzione verrà poi connessa con un evento di tocco, che viene eseguito ogni volta che viene toccata quella parte. Queste funzioni saranno poi connesse a un evento di tocco, che viene eseguito ogni volta che viene toccata quella parte.
Crea una nuova funzione chiamata givePoints() e un parametro chiamato player . Dentro, aggiungi una dichiarazione di stampa da utilizzare per il test.
local Players = game:GetService("Players")-- Aggiunge o sottrae puntilocal function givePoints(player)print("Giving player points")endSotto quello, crea una seconda funzione chiamata partTouched() con un parametro chiamato otherPart .
-- Aggiunge o sottrae puntilocal function givePoints(player)print("Giving player points")end-- Controlla se il giocatore ha toccato la partelocal function partTouched(otherPart)endDentro la funzione, usa la funzione GetPlayerFromCharacter() per controllare se c'è un giocatore nella variabile altra parte.
-- Controlla se il giocatore ha toccato la partelocal function partTouched(otherPart)local player = Players:GetPlayerFromCharacter(otherPart.Parent)endSe un giocatore tocca la parte, verrà memorizzato all'interno della variabile del giocatore. Se non è così, la variabile rimarrà vuota. Da Proprio:
- All'interno della funzione, controlla se il giocatore ha un valore. Se c'è, allora chiama givePoints(player) .
- Sotto la funzione, connect partTouched() all'evento Touched of pointPart .
-- Controlla se il giocatore ha toccato la partelocal function partTouched(otherPart)-- Ottiene il giocatore se uno tocca la partelocal player = Players:GetPlayerFromCharacter(otherPart.Parent)if player thengivePoints(player)endendpointPart.Touched:Connect(partTouched)Esegui il progetto. Ogni volta che un giocatore tocca la parte, dovresti vedere un messaggio nella finestra di uscita che dice: "Giving player points" Risolvere i problemi::
- Controlla che "Players" in game:GetService("Players") sia capitalizzato e in quotazioni.
- partTouched() dovrebbe essere connesso all'evento Touched di pointPart.
Crea colori a looping
Per loop attraverso i colori, lo script userà un while = loop che cambia il colore della parte ogni pochi secondi. La condizione per questo loop sarà vera, quindi può essere eseguito indefinitamente.
Alla fine dello script, crea un nuovo while loop in cui la condizione è vera, il che significa che il loop si esegue sempre.
-- Controlla se il giocatore ha toccato la partelocal function partTouched(otherPart)-- Ottiene il giocatore se uno tocca la partelocal player = Players:GetPlayerFromCharacter(otherPart.Parent)if player thengivePoints(player)endendpointPart.Touched:Connect(partTouched)-- Loop attraverso i coloriwhile true doendDa Proprio, codifica un po 'vero do loop che cambia pointPart al colore delle variabili che hai creato. Non dimenticare di utilizzare task.wait() tra i colori. Quando hai finito, controlla il tuo codice contro la versione sottostante.
-- Loop attraverso 3 colori, aspettando tra un colore e l'altrowhile true dopointPart.Color = bluetask.wait(3)pointPart.Color = greentask.wait(2)pointPart.Color = redtask.wait(1)endProva e controlla che tutti e tre i colori si ripetano senza fermarsi.
Risolvere i problemi
A questo punto, se il looping dei colori non funziona come previsto, prova uno dei seguenti metodi.
- Assicurati che il while loop sia alla base dello script, sotto l'evento Touched . Se il while non è alla base, non eseguirà le altre parti dello script correttamente.
- Assicurati che ogni colore all'interno di Color3.fromRGB() sia correttamente scritto. Ci devono essere tre numeri tra 0 e 255 separati da virgole, come (255, 50, 0) .
Dare ai giocatori i punti
I giocatori riceveranno punti in base al colore attuale della parte quando la toccheranno.
Trovare il colore corrente
Ogni volta che un giocatore tocca la parte, lo script dovrà conoscere il colore corrente della parte per assegnare i punti in seguito.
Trova givePoints() . Sostituisci il tuo messaggio di test con una variabile per il colore corrente di pointPart. Questa variabile determinerà il numero di punti che il giocatore ottiene (o perde).
local function givePoints(player)local currentColor = pointPart.ColorendPer influenzare i punti di un Giocatore, quella funzione ha bisogno dell'accesso alla Classificadel Giocatore. Crea una variabile per memorizzarlo.
local function givePoints(player)local currentColor = pointPart.Colorlocal playerStats = player:WaitForChild("leaderstats")endOra aggiungi una variabile per ottenere il valore dei punti del Giocatore, che è un figlio della loro Classifica.
local function givePoints(player)local currentColor = pointPart.Colorlocal playerStats = player:WaitForChild("leaderstats")local playerPoints = playerStats:WaitForChild("Points")end
Dare o Sottrarre Punti
Successivamente, userai if e elif per dare o sottrarre punti a seconda del colore della parte quando toccata. Ricorda che il blu fornisce una piccola quantità, il verde fornisce molti e il rosso sottrae punti.
Dentro givePoints() , sotto le variabili, usa un if statement to check if the current color is blue and if so then add smallPoints al valore dei punti del Giocatore.
local function givePoints(player)local currentColor = pointPart.Colorlocal playerStats = player:WaitForChild("leaderstats")local playerPoints = playerStats:WaitForChild("Points")if currentColor == blue thenplayerPoints.Value += smallPointsendendPer controllare per verde, aggiungi un altro se la condizione. Se verde, quindi aggiungi la variabile largePoints ai punti del Giocatore.
if currentColor == blue thenplayerPoints.Value += smallPointselseif currentColor == green thenplayerPoints.Value += largePointsendUsa un'altra dichiarazione per sottrarre i punti se pointsPart non era blu né verde.
if currentColor == blue thenplayerPoints.Value += smallPointselseif currentColor == green thenplayerPoints.Value += largePointselseplayerPoints.Value -= losePointsendInfine, distruggi la parte dopo la dichiarazione if in modo che lo script non possa continuare a dare punti.
if currentColor == blue thenplayerPoints.Value += smallPointselseif currentColor == green thenplayerPoints.Value += largePointselseplayerPoints.Value -= losePointsendpointPart:Destroy()Prova e controlla che ogni colore dia i punti come previsto. Assicurati di testare tutte le tre condizioni.
Dare ai giocatori feedback
Il punto partenza funziona, ma i giocatori potrebbero non notare che qualcosa è successo a meno che non accadano di guardare la loro Classifica. Riparalo creando parti quando il punto partenza viene distrutto.
L'aggiunta di feedback quando i giocatori utilizzano una parte, come suoni, scuote o parti, rende le interazioni con gli oggetti più soddisfacenti per i giocatori.
Creazione di un effetto di particelle
L'effetto delle particelle sarà lo stesso colore della parte quando viene toccata. Poiché i colori sono stati memorizzati nelle variabili, è facile riutilizzarli.
In givePoints() alla parte inferiore, crea una nuova esempio ParticleEmitter . Assicurati che il nome dell'istanza sia scritto esattamente come mostrato.
local particle = Instance.new("ParticleEmitter")endI parteletti emittenti utilizzano sequenze di colore per controllare la loro Proprietàdi colore. Crea una nuova sequenza di colore e passa il colore corrente.
-- Distruggi partepointPart:Destroy()-- Crea partilocal particle = Instance.new("ParticleEmitter")particle.Color = ColorSequence.new(currentColor)La particella dovrà essere parented al giocatore che l'ha toccata. Creare una variabile per ottenere il modello di Personaggio del Giocatore. Quindi, parent la parte alla testa del Giocatore.
local particle = Instance.new("ParticleEmitter")particle.Color = ColorSequence.new(currentColor)local playerCharacter = player.Characterparticle.Parent = playerCharacter:WaitForChild("Head")Usa task.wait() per un secondo, quindi distruggi le parti.
local particle = Instance.new("ParticleEmitter")particle.Color = ColorSequence.new(currentColor)local playerCharacter = player.Characterparticle.Parent = playerCharacter:WaitForChild("Head")task.wait(1)particle:Destroy()Prova il gioco e assicurati che le particelle seguano brevemente il giocatore dopo aver toccato ciascun colore.
Risolvere i problemi
A questo punto, se le parti non funzionano come previsto, prova uno delle seguenti opzioni a seguire.
- Fai quando crei una nuova istanza che ParticleEmitter è scritto esattamente come mostrato e all'interno delle citazioni.
- Quando genere le parti, assicurati di utilizzare : tra playerCharacter e WaitForChild() con nessuno spazio tra.
Completa PointScript
Una versione finita dello script può essere riferita qui sotto.
local pointPart = script.Parent
--local storage = Gioco:GetService("ServerStorage")
-- Dà alcuni punti
local blue = Color3.fromRGB(0, 0, 255)
-- Dà più punti
local green = Color3.fromRGB(0, 255, 0)
-- Fa perdere punti ai giocatori
local red = Color3.fromRGB(255, 0, 0)
-- oro dato ai giocatori
local smallPoints = 10
local largePoints = 50
local losePoints = 100
local Players = game:GetService("Players")
local function givePoints(player)
local currentColor = pointPart.Color
local playerStats = player:WaitForChild("leaderstats")
local playerPoints = playerStats:WaitForChild("Points")
-- Dà al giocatore l'oro in base al colore della parte
if currentColor == blue then
playerPoints.Value += smallPoints
elseif currentColor == green then
playerPoints.Value += largePoints
else
playerPoints.Value -= losePoints
end
-- Distruggi la parte, aspetta un secondo e poi distruggi la particella
pointPart:Destroy()
-- Crea un effetto scintillante e lo distrugge
local playerCharacter = player.Character
local particle = Instance.new("ParticleEmitter")
particle.Color = ColorSequence.new(currentColor)
particle.Parent = playerCharacter:WaitForChild("Head")
task.wait(1)
particle:Destroy()
end
local function partTouched(otherPart)
local player = Players:GetPlayerFromCharacter(otherPart.Parent)
if player then
givePoints(player)
end
end
pointPart.Touched:Connect(partTouched)
-- Cambia il colore della parte in base alle variabili. Deve essere in fondo dello script.
while true do
pointPart.Color = blue
task.wait(4)
pointPart.Color = green
task.wait(3)
pointPart.Color = red
task.wait(2)
end