Dieses Projekt verwendet bedingte Anweisungen, um ein Teil zu erstellen, das Punkte auf einer Bestenliste basierend auf der Farbe des Teils, wenn er berührt wird. Wenn blau, dann wird den Spielern einige Punkte geben. Wenn grün, dann wird viel Punkte geben. Schließlich, wenn rot, wird die Punkte wegnehmen.
Das Projekt einrichten
Der Punkt, der Teil, kann in jedes Projekt hinzugefügt werden, in dem Punkte relevant sind. Zum Instanzein Abenteuerspiel, in dem Spieler Punkte sammeln.
Punkt-Verfolgung
Um dieses Projekt aufzustellen, benötigen Sie eine Bestenliste, um die Punkte zu verfolgen, und ein Teil, das Farben ändert. Der Code für die Bestenliste wird bereitgestellt.
Erstellen Sie ein neues Skript in ServerScriptService mit dem Namen Leaderboard. Kopieren Sie und fügen Sie den Code unten in das Skript, das. PL: die Skriptsein.
--In ServerScriptService erstellen Sie ein Skript namens PlayerSetup mit den folgenden Inhalten.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-- Laufen Sie aufPlayerJoin aus, wenn das Ereignis PlayerAdded ausgelöst wirdPlayers.PlayerAdded:Connect(onPlayerJoin)
Farbwechselndes Teil
Das Skript wird durch drei verschiedene Farben für das Teil durchlaufen. Jede Farbe wird eine Variable haben, um ihren RGB-Wert zu speichern, einen Datentyp, der ein Set von drei Zahlen (Rot, Grün, Blau) enthält, die Farben erstellen.
Erstellen Sie ein Teil mit dem Namen PointPart mit einem beigefügten Skript namens PointScript.
In PointScript verwenden Sie script.Parent, um auf das Teil zu verweisen.
local pointPart = script.ParentErstellen Sie Variablen, um die verschiedenen Farben zu speichern. Jede Variable sollte auf Color3.fromRGB() eingestellt sein, was einen Farbwert erstellt.
- 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 von Punkten, eine größere Anzahl von Punkten und einen Dritt für das Entfernen von Punkten hinzu.
-- Farbenlocal blue = Color3.fromRGB(0, 0, 255)local green = Color3.fromRGB(0, 255, 0)local red = Color3.fromRGB(255, 0, 0)-- Punkte-wertelocal smallPoints = 10local largePoints = 50local losePoints = 100
Player-Service hinzufügen
Um Punkte zu vergeben, musst du Zugriff auf die Informationen des Spieler:inerhalten, die in der Explorer unter den Spielern gespeichert ist, und die von dem Charakter-Objekt getrennt ist. Dies ist der Ort, an dem Informationen wie Bestenlistenstatistiken gefunden werden können.
Du kannst dies tun, indem du den Players -Dienst zu deinem Skript, das. PL: die Skriptshinzufügst. Services sind zusätzliche vordefinierte Funktionen, die von Roblox-Ingenieuren erstellt wurden, um dir Zeit zu sparen.
Erhalten Sie den Players Service, indem Sie tippen:
local Players = game:GetService("Players")
-- Punkte-wertelocal smallPoints = 10local largePoints = 50local losePoints = 100-- Dienste erforderlichlocal Players = game:GetService("Players")
Funktionen und Ereignisse
PointsScript wird zwei Funktionen benötigen. Die erste Funktion wird Teile geben und subtrahieren. Die zweite Funktion wird überprüfen, ob ein Spieler die Teile berührt hat. Diese Funktionen werden dann mit einem Berührungsevent verbunden, das immer ausgeführt wird, wenn dieser Teil berührt wird.
Erstellen Sie eine neue Funktion namens givePoints() und ein Parameter namens player . Dans, addieren Sie ein Print- Statement, um es für das Testen zu verwenden.
local Players = game:GetService("Players")-- Gibt oder subtrahiert Punktelocal function givePoints(player)print("Giving player points")endUnter dem erstellen Sie eine zweite Funktion namens partTouched() mit einem Parameter namens otherPart .
-- Gibt oder subtrahiert Punktelocal function givePoints(player)print("Giving player points")end-- Überprüft, ob der Spieler das Teil berührt hatlocal function partTouched(otherPart)endIn der Funktion verwenden Sie die Funktion GetPlayerFromCharacter() , um zu überprüfen, ob es einen Spieler in der anderen Teil variablen gibt.
-- Ü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, wird es in der Variable des Spielers gespeichert. Wenn nicht, bleibt die Variable leer. Auf deinem besitzen:
- In der Funktion überprüfen Sie, ob der Spieler einen Wert hat. Wenn ja, dann rufen Sie givePoints(player) auf.
- Unter der Funktion, verbinden Sie partTouched() mit dem Ereignis Touched von pointPart .
-- Überprüft, ob der Spieler das Teil berührt hatlocal function partTouched(otherPart)-- Bekommt den Spieler, wenn einer das Teil berührtlocal player = Players:GetPlayerFromCharacter(otherPart.Parent)if player thengivePoints(player)endendpointPart.Touched:Connect(partTouched)Run das Projekt. Wenn ein Spieler die Teile berührt, solltest du eine Nachricht im Ausgabe-Fenster sehen, die sagt: "Giving player points" Tipps zum Fehler-Schießen:
- Überprüfen Sie, dass "Players" in game:GetService("Players") mit Großbuchstaben und in Klammern geschrieben ist.
- partTouched() sollte mit dem Ereignis Touched von pointPart verbunden sein.
Looping-Farben erstellen
Um durch Farben zu durchlaufen, verwendet das Skript eine while = Loop , die die Farbe des Teils alle paar Sekunden ändert. Die Bedingung für diese Loop wird wahr sein, so dass es unbegrenzt ausgeführt werden kann.
Am Ende des Skripts erstellen Sie einen neuen While-Loop, in dem die Bedingung wahr ist, was bedeutet, dass der Loop immer ausgeführt wird.
-- Überprüft, ob der Spieler das Teil berührt hatlocal function partTouched(otherPart)-- Bekommt den Spieler, wenn einer das Teil berührtlocal player = Players:GetPlayerFromCharacter(otherPart.Parent)if player thengivePoints(player)endendpointPart.Touched:Connect(partTouched)-- Loop durch Farbenwhile true doendbesitzen, code ein while true do loop, das verändert PunktTeil in die Farb变수, die du erstellt hast. Vergiss nicht, task.wait() zwischen Farben zu verwenden. Wenn du fertig bist, überprüfe deinen Code gegen die Version unten.
-- Loop durch 3 Farben, zwischen jedem Farben wartenwhile true dopointPart.Color = bluetask.wait(3)pointPart.Color = greentask.wait(2)pointPart.Color = redtask.wait(1)endSpiel-Test und überprüfen Sie, dass alle drei Farben ohne Unterbrechung in der Schleife sind.
Troubleshooting-Tipps
Wenn sich die Farb-Looping nicht wie erwartet funktioniert, versuchen Sie einen der folgenden Optionen unten.
- Überprüfen Sie, dass der While-Loop am unteren Rand des Skript, das. PL: die Skriptsнаходится, unter dem Touched-Ereignis. Wenn der Loop nicht am unteren Rand ist, wird die andere Teile des Skripts nicht richtig ausgeführt.
- Überprüfen Sie, dass jeder Farbe innerhalb von Color3.fromRGB() korrekt geschrieben ist. Es muss drei Zahlen zwischen 0 und 255 geben, die durch Kommas getrennt sind, wie (255, 50, 0) .
Spielern Punkte geben
Spieler erhalten Punkte basierend auf der aktuellen Farbe des Teils, wenn sie ihn berühren.
Die aktuelle Farbe finden
Wenn ein Spieler das Teil berührt, muss das Skript die aktuelle Farbe des Teils kennen, um Punkte später zu vergeben.
Finden Sie givePoints() . Ersetzen Sie Ihre Testnachricht durch eine Variable für die aktuelle Farbe von pointPart. Diese Variable wird bestimmen, wie viele Punkte der Spieler erhält (oder verliert).
local function givePoints(player)local currentColor = pointPart.ColorendUm die Punkte eines Spieler:inzu beeinflussen, braucht diese Funktion Zugriff auf die Bestenlistedes Spieler:in. Erstellen Sie eine Variable, um sie zu speichern.
local function givePoints(player)local currentColor = pointPart.Colorlocal playerStats = player:WaitForChild("leaderstats")endFügen Sie jetzt eine Variable hinzu, um den Wert der Punkte des Spieler:inzu erhalten, der ein Kind seiner Bestenliste ist.
local function givePoints(player)local currentColor = pointPart.Colorlocal playerStats = player:WaitForChild("leaderstats")local playerPoints = playerStats:WaitForChild("Points")end
Punkte geben oder abziehen
Danach verwendest du if und elif, um Punkte je nach Farbe des Teils hinzuzufügen oder abzuziehen. Denke daran, dass Blau eine kleine Menge, Grün viele und Rot Punkte abzieht.
In givePoints() , unter den Variablen, verwenden Sie ein If-Anweisung, um zu überprüfen, ob die aktuelle Farbe blau ist, und wenn ja, dann fügen Sie smallPoints dem aktuellen Punktewert des Spieler:inhinzu.
local function givePoints(player)local currentColor = pointPart.Colorlocal playerStats = player:WaitForChild("leaderstats")local playerPoints = playerStats:WaitForChild("Points")if currentColor == blue thenplayerPoints.Value += smallPointsendendUm nach grün zu überprüfen, füge einen else if condition hinzu. Wenn grün, dann füge die largePoints Variable zu den Punkten des Spieler:inhinzu.
if currentColor == blue thenplayerPoints.Value += smallPointselseif currentColor == green thenplayerPoints.Value += largePointsendVerwenden Sie eine andere Anweisung, um Punkte abzuziehen, wenn PunkteTeil entweder nicht blau noch grün war.
if currentColor == blue thenplayerPoints.Value += smallPointselseif currentColor == green thenplayerPoints.Value += largePointselseplayerPoints.Value -= losePointsendZum Schluss zerstöre das Teil nach der if-Anweisung, damit das Skript keine Punkte mehr geben kann.
if currentColor == blue thenplayerPoints.Value += smallPointselseif currentColor == green thenplayerPoints.Value += largePointselseplayerPoints.Value -= losePointsendpointPart:Destroy()Spieltest und stelle sicher, dass jede Farbe wie erwartet Punkte gibt. Be sure to test all drei Bedingungen.
Feedback für Spieler geben
Die PointPart funktioniert, aber Spieler könnten nicht bemerken, dass etwas passiert, wenn sie nicht auf ihre Bestenlisteschauen. Behebe dies, indem du Partikel erstellst, wenn die PointPart zerstört wird.
Feedback hinzufügen, wenn Spieler ein Teil verwenden, wie z. B. Geräusche, Schütteln oder Partikel, macht Interaktionen mit Objekten für Spieler angenehmer.
Ein Partikeleffekt erstellen
Der Partikeleffekt wird die gleiche Farbe wie der Teil sein, wenn er berührt wird. Da die Farben in Variablen gespeichert wurden, ist es einfach, sie wiederzuverwenden.
In givePoints() am unteren Rand erstellen Sie eine neue ParticleEmitter Instanz. Stellen Sie sicher, dass der Name der Instanz genau so geschrieben ist, wie in der Anzeige gezeigt.
local particle = Instance.new("ParticleEmitter")endParticleEmitter verwenden Farbsequenzen, um ihre Eigenschaftenzu steuern. Erstellen Sie eine neue FarbSequenz und geben Sie die aktuelle Farbe des Teils ein.
-- Teil zerstörenpointPart:Destroy()-- Partikel erstellenlocal particle = Instance.new("ParticleEmitter")particle.Color = ColorSequence.new(currentColor)Die Partikel muss in den Spieler übergehen, der sie berührt hat. Erstellen Sie eine Variable, um das Modelldes Spieler:inzu erhalten. Dann übergeben Sie die Partikel an den Kopf des Spieler:in.
local particle = Instance.new("ParticleEmitter")particle.Color = ColorSequence.new(currentColor)local playerCharacter = player.Characterparticle.Parent = playerCharacter:WaitForChild("Head")Verwenden Sie task.wait() für eine schnelle Sekunde und zerstören Sie 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()Spieltest das Spiel und stelle sicher, dass die Partikel die Spieler nach dem Berühren der einzelnen Farben kurz folgen.
Troubleshooting-Tipps
An dieser Stelle, wenn Partikel nicht wie erwartet funktionieren, versuchen Sie einen der folgenden unten.
- Erstellen Sie, wenn Sie einen neuen Instanz erstellen, dass ParticleEmitter mit exakt so geschrieben ist, wie in Klammern gezeigt und in Quellen.
- Wenn Sie die Partikel beleiten, stellen Sie sicher, dass Sie : zwischen playerCharacter und WaitForChild() mit keinen Leerstellen verwenden.
Schließe PointScript ab
Eine fertige Version des Skripts kann unten verwendet werden.
local pointPart = script.Parent
--lokales Speichern = Spiel:GetService("ServerStorage")
-- Gibt einige Punkte
local blue = Color3.fromRGB(0, 0, 255)
-- Gibt mehr Punkte
local green = Color3.fromRGB(0, 255, 0)
-- Lässt Spieler Punkte verlieren
local red = Color3.fromRGB(255, 0, 0)
-- gold für spieler gegeben
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 dann zerstöre die Partikel
pointPart:Destroy()
-- Erzeugt einen Funkel-Effekt 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 unten des Skript, das. PL: die Skriptssein.
while true do
pointPart.Color = blue
task.wait(4)
pointPart.Color = green
task.wait(3)
pointPart.Color = red
task.wait(2)
end