Jetzt, da du eine 3D-Welt hast, lehrt dich dieser Abschnitt des Tutorials, wie du dein erstes Skript hinzufügst, um eine Münzsammlungsmechanik zu definieren.Diese Mechanik ermöglicht es Spielern, Münzen zu sammeln, und deaktiviert die Sammlung einer Münze, wenn sie kürzlich gesammelt wurde.
Erstelle die Münzen
Bevor du etwas skripten kannst, musst du Plattform-Objekte in der Welt haben, die du als deine Münzen verwenden kannst.Wie die Meeresstapelplattformen, die du im vorherigen Abschnitt erstellt hast, können die Münzen einfache Part Objekte sein.
Um die Münzen zu erstellen:
Füge im Explorer -Fenster einen neuen Ordner in den Welt -Ordner ein und benenne ihn dann Münzen um.
Füge ein Zylinder -Teil in den Münzen -Ordner ein und benenne das Teil dann in Münze um.
Wählen Sie das Teil aus, dann im Eigenschaften -Fenster,
- Setze Ziegelfarbe auf Gold .
- Setze Material auf Metall .
- Setze Größe auf .
- Deaktiviere Kann kollidieren .Das sagt der Engine, dass andere Teile durch die Münze gehen können, was bedeutet, dass Spieler durch die Münzen gehen können, um sie zu sammeln.
- Aktiviere verankert .Dies sagt der Engine, dass sie die Position der Münze niemals aufgrund einer physikbezogenen Simulation ändern soll, was bedeutet, dass Spieler die Münze berühren können, ohne ihre Position zu beeinflussen.
Dupliziere ein paar weitere Münzen und positioniere sie auf der Karte für Testzwecke.
Deine Zylinderteile sehen jetzt wie Münzen aus und verhindern die Physiksimulation, aber du musst der Münze Logik hinzufügen, damit Spieler sie sammeln können.
Erstelle das Skript, das. PL: die Skripts
Damit die Münzen sammelbar sind, möchten Sie auf Spieler reagieren, die sie berühren.Die Roblox-Engine kann dich benachrichtigen, wenn etwas eine Münze berührt, aber du musst das in einem Skript, das. PL: die Skriptsdeklarieren.Um ein Skript, das. PL: die Skriptszu erstellen:
In dem Explorer Fenster bewegen Sie den Mauszeiger über ServerScriptService und klicken Sie auf die Schaltfläche ⊕ . Ein Kontextmenü wird angezeigt.
Wählen Sie aus dem Kontextmenü Skript .Ein neues Skript wird unter ServerScriptService angezeigt, das der Engine mitteilt, das Skript auf dem Server auszuführen, und verhindert, dass Clients auf den Codeszugreifen können.
Benennen Sie das Skript in CoinService um.
Ersetze den Standardcode durch den folgenden Codes:
-- Initialisierung von Diensten und Variablenlocal Workspace = game:GetService("Workspace")local Players = game:GetService("Players")local coinsFolder = Workspace.World.Coinslocal coins = coinsFolder:GetChildren()local COOLDOWN = 10-- Event-Handler definierenlocal function onCoinTouched(otherPart, coin)if coin:GetAttribute("Enabled") thenlocal character = otherPart.Parentlocal player = Players:GetPlayerFromCharacter(character)if player then-- Spieler berührte eine Münzecoin.Transparency = 1coin:SetAttribute("Enabled", false)print("Player collected coin")task.wait(COOLDOWN)coin.Transparency = 0coin:SetAttribute("Enabled", true)endendend-- Event-Listen aktivierenfor _, coin in coins docoin:SetAttribute("Enabled", true)coin.Touched:Connect(function(otherPart)onCoinTouched(otherPart, coin)end)endJetzt verschwindet jedes Mal, wenn ein Spieler eine Münze berührt, die Münze für 10 Sekunden und der Ausgabe-Log druckt Player collected coin.
Code-ErklärungDie folgenden Abschnitte beschreiben, wie das Skript im Detail funktioniert.
Dienste und Variablen initialisieren
Wie bei viel Code, den du wahrscheinlich in anderen Sprachen geschrieben hast, definierst du Variablen, die du später oben im Skript, das. PL: die Skriptsbenötigst.Unser Code tut gefolgte Profile:
Erhalten Sie Referenzen zu allen Münzen - Das Skript fragt dann die 3D-Arbeitsumgebung für alle Referenzen zu Münzobjekten mit der Methode ab.Diese Methode gibt eine Liste zurück, die alles enthält, was dem Objekt beigefügt ist, mit dem es verbunden ist, was in diesem Fall der Ordner Workspace.World.Coins ist, den du zuvor erstellt hast.
Definiert eine globale Variable - Die COOLDOWN -Variable wird später verwendet, um zu definieren, wie lange eine Münze deaktiviert wird, nachdem sie gesammelt wurde.
Initialisierung von Diensten und Variablenlocal Workspace = game:GetService("Workspace")local Players = game:GetService("Players")local coinsFolder = Workspace.World.Coinslocal coins = coinsFolder:GetChildren()local COOLDOWN = 10...
Definieren Sie den Event-Handler
Die Roblox-Engine simuliert physisch die 3D-Welt und übernimmt viel der Logik zur Verarbeitung von Ereignissen, die mit Rendern, Physik und Vernetzung verbunden sind.Wenn Sie daran interessiert sind, Ihre eigene Logik während einiger dieser Ereignisse zu skripten, können Sie sie hören und handhaben, während die Engine den Rest erledigt.In diesem Fall hören Sie auf und handeln Sie mit Ereignissen, die sich auf Münzen beziehen, die berührt werden.Das Skript definiert die Logik für die Bearbeitung dieses Ereignisses in der onCoinTouched()-Methode, die gefolgte Profiletut:
Erkennt, ob die Münze aktiviert ist - Jedes Instance hat ein Enabled boolesches Attribut, das definiert, ob das Objekt in der 3D-Welt existiert oder nicht.Du kannst Instanzattributen mit der Methode GetAttribute() erhalten.
Erkennt, 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:inwar.Wenn ein Berührungsereignis auftritt, übermittelt die Roblox-Engine das Objekt, das die Münze berührt hat, als otherPart Parameter.Das Skript prüft, ob der Elternteil von otherPart zu einem Spieler:ingehört.
Deaktiviert die Münze, wenn ein Spieler sie berührt, und aktiviert sie nach 10 Sekunden wieder - Schließlich, wenn ein Spieler die Münze berührt, deaktiviert die Methode die Münze, wartet 10 Sekunden und aktiviert die Münze dann wieder für die Sammlungen. task.wait() wird verwendet, anstatt wait(), weil es eine bessere Leistung bietet, indem es die Codeausführung nicht vollständig unterbricht und Aufgaben in anderen Threads gleichzeitig ausgeführt werden können.
Event-Handler definierenlocal function onCoinTouched(otherPart, coin)if coin:GetAttribute("Enabled") thenlocal character = otherPart.Parentlocal player = Players:GetPlayerFromCharacter(character)if player then-- Spieler berührte eine Münzecoin.Transparency = 1coin:SetAttribute("Enabled", false)print("Player collected coin")task.wait(COOLDOWN)coin.Transparency = 0coin:SetAttribute("Enabled", true)endendend
Verbinde den Ereignishändler
Alle simulierten 3D-Objekte erben von BasePart und haben daher ein Touched() Ereignis.Die folgende Schleife verbindet den onTouchedEvent() -Handler mit jedem Berührungsereignis einer Münze, indem sie gefolgte Profiletut:
Schleife durch alle Münzen - Schleife durch jede der Münzen mit einer allgemeinen Iteration.
Verbinde den Handler mit dem Ereignis - In jeder Iteration der Schleife wird die Münze standardmäßig aktiviert, so dass sie in der 3D-Welt während des ersten Starts der Erlebnissichtbar ist.Die onCoinTouched() Handler-Methode ist auch mit dem Touched Event der Münze verbunden, so dass sie jedes Mal ausgeführt wird, wenn das Ereignis auftritt.Wenn die Engine eine Berührung erkennt, gibt sie auch das Objekt weiter, das das Objekt berührt hat, otherPart .
Verbindung des Event-Handlersfor _, coin in coins docoin:SetAttribute("Enabled", true)coin.Touched:Connect(function(otherPart)onCoinTouched(otherPart, coin)end)end
Teste die Mechanik
Es ist Zeit zu sehen, ob die Münzsammlungsmechanik wie beabsichtigt funktioniert. Um dein Erlebnis zu testen:
Klicke in der Toolbar auf die Schaltfläche Spielen . Studio wechselt in den Spieltest-Modus.
Bewegen Sie Ihren Charakter, um eine Münze zu berühren.Wenn deine Skripte richtig funktionieren, zeigt das Ausgabe -Fenster Player collected coin an und die Münze verschwindet für 10 Sekunden, bevor sie wieder erscheint.