Dieses Projekt verwendet bedingte Anweisungen, um ein Teil zu erstellen, das je nach Farbe des Berührungsobjekts Punkte auf einem Bestenliste gibt oder abzieht. Ist es blau, erhält der Spieler ein paar Punkte. Bei grün gibt es viele Punkte. Schließlich, wenn es rot ist, werden Punkte abgezogen.
Projekt einrichten
Das punktgebende Teil kann in jedem Projekt hinzugefügt werden, in dem Punkte relevant sind. Zum Beispiel in einem Abenteuerspiel, in dem Spieler Punkte sammeln.
Punkteverfolgung
Um dieses Projekt einzurichten, benötigst du eine Bestenliste, um die Punkte zu verfolgen, und ein Teil, das die Farben wechselt. Der Code für die Bestenliste wird bereitgestellt.
Erstelle ein neues Skript in ServerScriptService mit dem Namen Leaderboard. Kopiere den folgenden Code in das Skript.
--Erstelle in ServerScriptService ein Skript mit dem Namen PlayerSetup mit dem Inhalt unten.local Players = game:GetService("Players")local function onPlayerJoin(player)local leaderstats = Instance.new("Folder")leaderstats.Name = "leaderstats"leaderstats.Parent = player-- Beispiel für einen IntValuelocal points = Instance.new("IntValue")points.Name = "Points"points.Value = 0points.Parent = leaderstatsend-- Führe onPlayerJoin aus, wenn das PlayerAdded-Ereignis ausgelöst wirdPlayers.PlayerAdded:Connect(onPlayerJoin)
Farbwechselndes Teil
Das Skript wird das Teil durch drei verschiedene Farben zyklen. Jede Farbe hat eine Variable, um ihren RGB-Wert zu speichern, einen Datentyp, der ein Set von drei Zahlen (rot, grün, blau) enthält, die Farben erzeugen.
Erstelle ein Teil mit dem Namen PointPart und einem angehängten Skript mit dem Namen PointScript.
Verwende in PointScript script.Parent, um auf das Teil zuzugreifen.
local pointPart = script.ParentErstelle Variablen, um die verschiedenen Farben zu speichern. Jede Variable sollte auf Color3.fromRGB() gesetzt werden, das einen Farbwert erzeugt.
- Blau (Einige Punkte): (0, 0, 255)
- Grün (Viele Punkte): (0, 255, 0)
- Rot (Punkte verlieren): (255, 0, 0)
local pointPart = script.Parent-- Farbenlocal blue = Color3.fromRGB(0, 0, 255)local green = Color3.fromRGB(0, 255, 0)local red = Color3.fromRGB(255, 0, 0)Füge Variablen für eine kleine Anzahl an Punkten, eine größere Anzahl an Punkten und eine dritte für den Punktabzug hinzu.
-- Farbenlocal blue = Color3.fromRGB(0, 0, 255)local green = Color3.fromRGB(0, 255, 0)local red = Color3.fromRGB(255, 0, 0)-- Punkten Wertelocal smallPoints = 10local largePoints = 50local losePoints = 100
Füge den Spielern-Dienst hinzu
Um Punkte zu vergeben, musst du Zugriff auf die Informationen des Spielers erhalten, die im Explorer unter Players gespeichert sind und vom Charakterobjekt getrennt sind. Dort findest du Informationen wie Statistiken der Bestenliste.
Du kannst dies tun, indem du den Players-Dienst zu deinem Skript hinzufügst. Dienste sind zusätzliche Sets von vorgefertigten Funktionen, die von Roblox-Ingenieuren erstellt wurden, um dir Zeit zu sparen.
Hole den Players-Dienst, indem du tippst:
local Players = game:GetService("Players")
-- Punkten Wertelocal smallPoints = 10local largePoints = 50local losePoints = 100-- Benötigte Dienstelocal Players = game:GetService("Players")
Funktionen und Ereignisse
PointsScript benötigt zwei Funktionen. Die erste Funktion gibt und zieht Punkte ab. Die zweite Funktion überprüft, ob ein Spieler das Teil berührt hat. Diese Funktionen werden dann mit einem Berührungsereignis verbunden, das jedes Mal ausgeführt wird, wenn das Teil berührt wird.
Erstelle eine neue Funktion namens givePoints() und einen Parameter namens player. Füge innerhalb eine Print-Anweisung hinzu, die für Tests verwendet wird.
local Players = game:GetService("Players")-- Gibt Punkte oder zieht Punkte ablocal function givePoints(player)print("Gebe dem Spieler Punkte")endDarunter erstelle eine zweite Funktion namens partTouched() mit einem Parameter namens otherPart.
-- Gibt Punkte oder zieht Punkte ablocal function givePoints(player)print("Gebe dem Spieler Punkte")end-- Überprüft, ob der Spieler das Teil berührt hatlocal function partTouched(otherPart)endVerwende innerhalb der Funktion die Funktion GetPlayerFromCharacter(), um zu überprüfen, ob im otherPart-Variablen ein Spieler vorhanden ist.
-- Überprüft, ob der Spieler das Teil berührt hatlocal function partTouched(otherPart)local player = Players:GetPlayerFromCharacter(otherPart.Parent)endWenn ein Spieler das Teil berührt hat, wird er in der Spieler-Variable gespeichert. Wenn nicht, bleibt die Variable leer. Auf eigene Faust:
- Überprüfe innerhalb der Funktion, ob der Spieler einen Wert hat. Wenn ja, rufe givePoints(player) auf.
- Verbinde unter der Funktion partTouched() mit dem Touched-Ereignis von pointPart.
-- Überprüft, ob der Spieler das Teil berührt hatlocal function partTouched(otherPart)-- Holt den Spieler, wenn einer das Teil berührt hatlocal player = Players:GetPlayerFromCharacter(otherPart.Parent)if player thengivePoints(player)endendpointPart.Touched:Connect(partTouched)Führe das Projekt aus. Immer wenn ein Spieler das Teil berührt, solltest du eine Nachricht im Ausgabefenster sehen, die sagt: "Gebe dem Spieler Punkte"
Fehlerbehebungstipps:
- Überprüfe, dass "Players" in game:GetService("Players") großgeschrieben und in Anführungszeichen geschrieben ist.
- partTouched() sollte mit dem Touched-Ereignis von pointPart verbunden sein.
Erstelle Schleifenfarben
Um die Farben zu durchlaufen, wird das Skript eine While-Schleife verwenden, die alle paar Sekunden die Farbe des Teils ändert. Die Bedingung für diese Schleife wird wahr sein, sodass sie unendlich laufen kann.
Am Ende des Skripts erstelle eine neue While-Schleife, bei der die Bedingung wahr ist, was bedeutet, dass die Schleife immer läuft.
-- Überprüft, ob der Spieler das Teil berührt hatlocal function partTouched(otherPart)-- Holt den Spieler, wenn einer das Teil berührt hatlocal player = Players:GetPlayerFromCharacter(otherPart.Parent)if player thengivePoints(player)endendpointPart.Touched:Connect(partTouched)-- Schleift durch die Farbenwhile true doendAuf eigene Faust, kodere eine while true do-Schleife, die pointPart auf die Farbspeicher-Variablen setzt, die du erstellt hast. Vergiss nicht, task.wait() zwischen den Farben zu verwenden. Überprüfe nach Abschluss deinen Code anhand der Version unten.
-- Schleift durch 3 Farben und wartet zwischen jeder Farbewhile true dopointPart.Color = bluetask.wait(3)pointPart.Color = greentask.wait(2)pointPart.Color = redtask.wait(1)endTeste und überprüfe, ob alle drei Farben ohne Unterbrechung durchlaufen werden.

Fehlerbehebungstipps
An diesem Punkt, falls das Farbenwechseln nicht wie gewünscht funktioniert, versuche Folgendes:
- Überprüfe, dass sich die while-Schleife am Ende des Skripts befindet, unterhalb des Touched-Ereignisses. Wenn die Schleife nicht am Ende ist, wird sie andere Teile des Skripts am richtigen Ausführen hindern.
- Überprüfe, dass jede Farbe innerhalb von Color3.fromRGB() korrekt geschrieben ist. Es müssen drei Zahlen zwischen 0 und 255 stehen, die durch Kommas getrennt sind, wie z.B. (255, 50, 0).
Vergib den Spielern Punkte
Spielern werden Punkte basierend auf der aktuellen Farbe des Teils gegeben, wenn sie es berühren.
Finde die aktuelle Farbe
Wann immer ein Spieler das Teil berührt, muss das Skript die aktuelle Farbe des Teils kennen, um später Punkte zu vergeben.
Finde givePoints(). Ersetze deine Testnachricht durch eine Variable für die aktuelle Farbe von pointPart. Diese Variable bestimmt, wie viele Punkte der Spieler erhält (oder verliert).
local function givePoints(player)local currentColor = pointPart.ColorendUm die Punkte eines Spielers zu beeinflussen, benötigt diese Funktion Zugriff auf die Bestenliste des Spielers. Erstelle eine Variable, um sie zu speichern.
local function givePoints(player)local currentColor = pointPart.Colorlocal playerStats = player:WaitForChild("leaderstats")endFüge jetzt eine Variable hinzu, um den Punktwert des Spielers zu erhalten, der ein Kind ihrer Bestenliste ist.
local function givePoints(player)local currentColor = pointPart.Colorlocal playerStats = player:WaitForChild("leaderstats")local playerPoints = playerStats:WaitForChild("Points")end
Punkte geben oder abziehen
Als nächstes verwendest du if und elseif, um Punkte zu vergeben oder abzuziehen, abhängig von der Farbe des Teils, wenn es berührt wird. Denk daran, dass blau eine kleine Menge gibt, grün viele gibt und rot Punkte abzieht.
Innerhalb von givePoints(), unterhalb der Variablen, verwende eine if-Anweisung, um zu überprüfen, ob die aktuelle Farbe blau ist und wenn ja, dann füge smallPoints zum aktuellen Punktwert des Spielers hinzu.
local function givePoints(player)local currentColor = pointPart.Colorlocal playerStats = player:WaitForChild("leaderstats")local playerPoints = playerStats:WaitForChild("Points")if currentColor == blue thenplayerPoints.Value += smallPointsendendUm auf grün zu überprüfen, füge eine else if-Bedingung hinzu. Wenn es grün ist, dann füge die largePoints-Variable zu den Punkten des Spielers hinzu.
if currentColor == blue thenplayerPoints.Value += smallPointselseif currentColor == green thenplayerPoints.Value += largePointsendVerwende eine else-Anweisung, um Punkte abzuziehen, wenn pointsPart weder blau noch grün ist.
if currentColor == blue thenplayerPoints.Value += smallPointselseif currentColor == green thenplayerPoints.Value += largePointselseplayerPoints.Value -= losePointsendZerschlage schließlich das Teil nach der if-Anweisung, sodass das Skript keine Punkte mehr vergeben kann.
if currentColor == blue thenplayerPoints.Value += smallPointselseif currentColor == green thenplayerPoints.Value += largePointselseplayerPoints.Value -= losePointsendpointPart:Destroy()Teste und überprüfe, dass jede Farbe die erwarteten Punkte vergibt. Stelle sicher, dass du alle drei Bedingungen testest.
Geben Sie den Spielern Feedback
Das PointPart funktioniert, aber die Spieler könnten nicht bemerken, dass etwas passiert ist, es sei denn, sie schauen zufällig auf ihre Bestenliste. Behebe dies, indem du Partikel erstellst, wenn das PointPart zerstört wird.
Zusätzliche Rückmeldungen, wenn Spieler ein Teil verwenden, wie Geräusche, Vibrationen oder Partikel, machen die Interaktionen mit Objekten für die Spieler befriedigender.
Erstelle einen Partikeleffekt
Der Partikeleffekt wird die gleiche Farbe wie das Teil haben, wenn es berührt wird. Da die Farben in Variablen gespeichert wurden, ist es einfach, sie wiederzuverwenden.
Erstelle in givePoints() am Ende ein neues ParticleEmitter-Instanz. Stelle sicher, dass der Instanzname genau so geschrieben ist, wie gezeigt.
local particle = Instance.new("ParticleEmitter")endParticleEmitters verwenden Farbsequenzen, um ihre Farb-Eigenschaft zu steuern. Erstelle eine neue ColorSequence und übergebe die aktuelle Teilfarbe.
-- Zerstöre das TeilpointPart:Destroy()-- Erstelle Partikellocal particle = Instance.new("ParticleEmitter")particle.Color = ColorSequence.new(currentColor)Das Partikel muss dem Spieler, der es berührt hat, zugewiesen werden. Erstelle eine Variable, um das Charaktermodell des Spielers zu erhalten. Dann, parent das Partikel zum Kopf des Spielers.
local particle = Instance.new("ParticleEmitter")particle.Color = ColorSequence.new(currentColor)local playerCharacter = player.Characterparticle.Parent = playerCharacter:WaitForChild("Head")Verwende task.wait() für eine kurze Sekunde, und zerstöre dann die Partikel.
local particle = Instance.new("ParticleEmitter")particle.Color = ColorSequence.new(currentColor)local playerCharacter = player.Characterparticle.Parent = playerCharacter:WaitForChild("Head")task.wait(1)particle:Destroy()Teste das Spiel und stelle sicher, dass die Partikel kurz hinter dem Spieler erscheinen, nachdem er jede Farbe berührt hat.
Fehlerbehebungstipps
An diesem Punkt, falls die Partikel nicht wie gewünscht funktionieren, versuche Folgendes:
- Stelle sicher, dass bei der Erstellung einer neuen Instanz ParticleEmitter genau so geschrieben und in Anführungszeichen gesetzt ist.
- Beim Parentieren der Partikel stelle sicher, dass du : zwischen playerCharacter und WaitForChild() ohne Leerzeichen verwendest.
Vollständiges PointScript
Eine fertige Version des Skripts kann unten referenziert werden.
local pointPart = script.Parent
--local storage = game:GetService("ServerStorage")
-- Gibt einige Punkte
local blue = Color3.fromRGB(0, 0, 255)
-- Gibt mehr Punkte
local green = Color3.fromRGB(0, 255, 0)
-- Lassen Sie die Spieler Punkte verlieren
local red = Color3.fromRGB(255, 0, 0)
-- gold gibt den Spielern
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")
-- Gibt dem Spieler Gold basierend auf der Farbe des Teils
if currentColor == blue then
playerPoints.Value += smallPoints
elseif currentColor == green then
playerPoints.Value += largePoints
else
playerPoints.Value -= losePoints
end
-- Zerstöre das Teil, warte eine Sekunde, und zerstöre dann das Partikel
pointPart:Destroy()
-- Erstellt einen Funkeneffekt und zerstört ihn
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)
-- Ändert die Farbe des Teils basierend auf Variablen. Muss am Ende des Skripts stehen.
while true do
pointPart.Color = blue
task.wait(4)
pointPart.Color = green
task.wait(3)
pointPart.Color = red
task.wait(2)
end