Erstellen Sie eine Münzsammlungsmechanik

*Dieser Inhalt wurde mit KI (Beta) übersetzt und kann Fehler enthalten. Um diese Seite auf Englisch zu sehen, klicke hier.


Jetzt, da Sie eine 3D-Welt haben, ist es an der Zeit, Ihr erstes Skript hinzuzufügen. In diesem Abschnitt erstellen Sie eine Münzsammlungsmechanik, die es den Spielern ermöglicht, Münzen zu sammeln und die Münzen vorübergehend zu deaktivieren, nachdem sie gesammelt wurden.

Erstellen Sie die Münzen

Bevor Sie irgendetwas skripten können, müssen Sie Platzhalterobjekte in der Welt haben, die Sie als Ihre Münzen verwenden können. Wie die Felsenplattformen, die Sie im vorherigen Abschnitt erstellt haben, können die Münzen einfache Part-Objekte sein.

Erstellen Sie die Münzen
In Workspace > World, erstellen Sie einen neuen Ordner mit dem Namen Coins.
Erstellen Sie im Coins-Ordner ein Zylinder-Teil mit dem Namen Coin, BrickColor auf Gold, Material auf Metall, Größe 0.6, 8, 4 und Orientierung 90, 0, 0.
Deaktivieren Sie CanCollide und aktivieren Sie Anchored.
Duplizieren Sie dann das Coin-Teil mehrmals und verteilen Sie die Duplikate auf der Insel und auf den Plattformen, damit sie von den Felsenplattformen aus erreichbar sind.
Halten Sie jedes Duplikat mit dem Namen Coin.

Erstellen Sie das Skript

Als Nächstes lassen Sie die Münzen auf die Spieler reagieren. Die Roblox-Engine kann erkennen, wann etwas eine Münze berührt, aber Sie müssen ein Skript verwenden, um zu definieren, wie die Münze reagieren soll.

Erstellen Sie CoinService
In ServerScriptService erstellen Sie ein Skript mit dem Namen CoinService mit dem folgenden Code:
```lua
-- Initialisierung von Diensten und Variablen
local Workspace = game:GetService("Workspace")
local Players = game:GetService("Players")
local coinsFolder = Workspace.World.Coins
local coins = coinsFolder:GetChildren()
local COOLDOWN = 10
-- Definieren des Ereignishandlers
local function onCoinTouched(otherPart, coin)
if coin:GetAttribute("Enabled") then
local character = otherPart.Parent
local player = Players:GetPlayerFromCharacter(character)
if player then
-- Spieler hat eine Münze berührt
coin.Transparency = 1
coin:SetAttribute("Enabled", false)
print("Spieler hat Münze gesammelt")
task.wait(COOLDOWN)
coin.Transparency = 0
coin:SetAttribute("Enabled", true)
end
end
end
-- Einrichten von Ereignis-Listenern
for _, coin in coins do
coin:SetAttribute("Enabled", true)
coin.Touched:Connect(function(otherPart)
onCoinTouched(otherPart, coin)
end)
end
```

Jetzt, wann immer ein Spieler eine Münze berührt, verschwindet die Münze für 10 Sekunden, und das Ausgabenprotokoll druckt Spieler hat Münze gesammelt.

Die folgenden Abschnitte beschreiben, wie das Skript im Detail funktioniert.

Dienste und Variablen initialisieren

Wie bei vielen der Codes, die Sie wahrscheinlich in anderen Sprachen geschrieben haben, definieren Sie Variablen, die Sie später benötigen, am Anfang des Skripts. Unser Code macht Folgendes:

  • Diensteinheiten abrufen - Roblox-Dienste bieten integrierte Funktionen für gängige Funktionen. Das Skript ruft zuerst Instanzen des Workspace-Dienstes ab, der jedes Objekt in der 3D-Welt enthält, und des Player-Dienstes, der alle Spieler verwaltet und enthält, die mit Ihrem Spiel verbunden sind.
  • Referenzen auf alle Münzen abrufen - Das Skript fragt dann den 3D-Arbeitsbereich nach allen Referenzen auf Münzobjekte mit der Methode GetChildren(). Diese Methode gibt ein Array zurück, das alles enthält, was dem Objekt zugeordnet ist, mit dem es verbunden ist, was in diesem Fall der Workspace.World.Coins-Ordner ist, den Sie zuvor erstellt haben.
  • Definiert eine globale Variable - Die Variable COOLDOWN wird später verwendet, um zu definieren, wie lange eine Münze nach dem Sammeln deaktiviert wird.
Initialisierung von Diensten und Variablen
local Workspace = game:GetService("Workspace")
local Players = game:GetService("Players")
local coinsFolder = Workspace.World.Coins
local coins = coinsFolder:GetChildren()
local COOLDOWN = 10
...

Den Ereignishandler definieren

Die Roblox-Engine simuliert physisch die 3D-Welt und behandelt einen Großteil der Logik, um Ereignisse im Zusammenhang mit Rendering, Physik und Netzwerk zu verarbeiten. Wenn Sie daran interessiert sind, Ihre eigene Logik während einiger dieser Ereignisse zu skripten, können Sie auf sie hören und sie verarbeiten, während Sie der Engine den Rest überlassen. In diesem Fall hören Sie auf und verarbeiten Ereignisse im Zusammenhang mit berührten Münzen. Das Skript definiert die Logik zur Verarbeitung dieses Ereignisses in der Methode onCoinTouched(), die Folgendes tut:

  • Überprüft, ob die Münze aktiviert ist - Jedes Instance hat ein Enabled-Boolean-Attribut, das definiert, ob das Objekt in der 3D-Welt existiert oder nicht. Sie können Instanzattribute mit der Methode GetAttribute() abrufen.
  • Überprüft, ob ein Spieler die Münze berührt hat - Wenn eine Münze aktiviert ist, verwendet die Methode den Spielerdienst, um zu überprüfen, ob das Objekt, das die Münze berührt hat, tatsächlich ein Spieler war. Wenn ein Berührungsereignis auftritt, übergibt die Roblox-Engine das Objekt, das die Münze berührt hat, als otherPart-Parameter. Das Skript überprüft, ob der Elternteil von otherPart zu einem Spieler gehört.
  • Deaktiviert die Münze, wenn ein Spieler sie berührt hat, und aktiviert sie nach 10 Sekunden wieder - Schließlich, wenn ein Spieler die Münze berührt hat, deaktiviert die Methode die Münze, wartet 10 Sekunden und aktiviert die Münze dann wieder zur Sammlung. task.wait() wird anstelle von wait() verwendet, da es eine bessere Leistung bietet, indem es die Codeausführung nicht vollständig pausiert und es Aufgaben in anderen Threads ermöglicht, gleichzeitig ausgeführt zu werden.
Definieren des Ereignishandlers
local function onCoinTouched(otherPart, coin)
if coin:GetAttribute("Enabled") then
local character = otherPart.Parent
local player = Players:GetPlayerFromCharacter(character)
if player then
-- Spieler hat eine Münze berührt
coin.Transparency = 1
coin:SetAttribute("Enabled", false)
print("Spieler hat Münze gesammelt")
task.wait(COOLDOWN)
coin.Transparency = 0
coin:SetAttribute("Enabled", true)
end
end
end

Den Ereignishandler verbinden

Alle simulierten 3D-Objekte erben von BasePart und haben daher ein Touched()-Ereignis. Die folgende Schleife verbindet den onTouchedEvent()-Handler mit dem Berührungsereignis jeder Münze, indem sie Folgendes tut:

  • Durchlaufen Sie alle Münzen - Durchlaufen Sie jede der Münzen mit allgemeiner Iteration.
  • Verbinden Sie den Handler mit dem Ereignis - In jeder Iteration der Schleife wird die Münze standardmäßig aktiviert, sodass sie zu Beginn des Spiels in der 3D-Welt sichtbar ist. Die Methode onCoinTouched() wird auch mit dem Touched-Ereignis der Münze verbunden, sodass sie jedes Mal ausgeführt wird, wenn das Ereignis auftritt. Wenn die Engine eine Berührung erkennt, übergibt sie auch das Objekt, das das Objekt berührt hat, otherPart.
Verbinden des Ereignishandlers
for _, coin in coins do
coin:SetAttribute("Enabled", true)
coin.Touched:Connect(function(otherPart)
onCoinTouched(otherPart, coin)
end)
end

Testen Sie die Mechanik

Wählen Sie Test aus dem Dropdown-Menü und klicken Sie auf Play. Bewegen Sie Ihren Charakter, um eine Münze zu berühren. Wenn alles funktioniert, verschwindet die Münze, das Output-Fenster druckt Spieler hat Münze gesammelt, und die Münze erscheint 10 Sekunden später wieder.

Das Ausgabefenster des Studios, das die Bestätigung anzeigt, dass der Spieler eine Münze gesammelt hat.
©2026 Roblox Corporation. Roblox, das Roblox-Logo und "Powering Imagination" gehören zu unseren eingetragenen und nicht eingetragenen Markenzeichen in den USA und anderen Ländern.