Jetzt, da du eine 3D-Welt hast, zeigt dieser Abschnitt des Tutorials dir, wie du dein erstes Skript hinzufügst, um eine Münz-Sammelmechanik zu definieren. Dieser Mechanismus erlaubt es den Spielern, Münzen zu sammeln, und deaktiviert die Sammlung einer Münze, wenn sie kürzlich gesammelt wurde.
Erstellen Sie die Münzen
Bevor du etwas skripten kannst, musst du Platzhalterobjekte in der Welt haben, um als deine Münzen zu verwenden. Wie die Meeressack-Plattformen, die du in der vorherigen Sektion erstellt hast, können die Münzen einfache Part-Objekte sein.
Um die Münzen zu erstellen:
In dem Explorer-Fenster , fügen Sie einen neuen Ordner in den World-Ordner und benennen Sie ihn dann Coins um.
Fügen Sie einen Zylinder Teil in den Münzen -Ordner ein, und benennen Sie den Teil dann in Münze um.
Wähle das Teil aus, dann im Eigenschaften -Fenster,
- Setze BrickColor auf Gold .
- Setze Material auf Metall .
- Set Größe auf 0,6, 8, 4 .
- Deaktivieren Sie KannCollide . Dies sagt dem Engine, dass andere Teile durch die Münze passieren können, wodurch Spieler durch die Münzen gehen können, um sie zu sammeln.
- Aktivieren Sie Verankert . Dies sagt dem Engine, dass er die Position der Münze niemals aufgrund einer physikalisch verwandten Simulation ändern soll, wodurch Spieler die Münze berühren können, ohne ihre Position zu beeinflussen.
Duplizieren Sie ein paar weitere Münzen und platzieren Sie sie auf der Karte für Testzwecke.
Deine Zylinderteile sehen jetzt wie Münzen aus und verhindern Physik-Simulation, aber du musst die Logik zu den Münzen hinzufügen, damit Spieler sie sammeln können.
Erstellen Sie das Skript
Damit die Münzen gesammelt werden können, reagieren Sie auf Spieler, die sie berühren. Die Roblox-Engine kann Sie benachrichtigen, wenn etwas eine Münze berührt, aber Sie müssen dies in einem Skript, das. PL: die Skriptserklären. 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.
Vom Kontextmenü aus, wählen Sie Skript . Ein neues Skript wird unter ServerScriptService angezeigt, das dem Engine sagt, dass das Skript auf dem Server ausgeführt werden soll und die Clients nicht auf den Codeszugreifen können.
Renennen Sie das Skript in CoinService um.
Ersetzen Sie den Standardcode durch den folgenden Codes:
-- Dienste und Variablen initialisierenlocal Workspace = game:GetService("Workspace")local Players = game:GetService("Players")local coinsFolder = Workspace.World.Coinslocal coins = coinsFolder:GetChildren()local COOLDOWN = 10-- Verdefinieren des Ereignishändlerslocal function onCoinTouched(otherPart, coin)if coin:GetAttribute("Enabled") thenlocal character = otherPart.Parentlocal player = Players:GetPlayerFromCharacter(character)if player then-- Der Spieler hat eine Münze berührtcoin.Transparency = 1coin:SetAttribute("Enabled", false)print("Player collected coin")task.wait(COOLDOWN)coin.Transparency = 0coin:SetAttribute("Enabled", true)endendend-- Ereignis-Listen einrichtenfor _, coin in coins docoin:SetAttribute("Enabled", true)coin.Touched:Connect(function(otherPart)onCoinTouched(otherPart, coin)end)endJetzt verschwindet die Münze, wenn ein Spieler eine Münze berührt, und das Ausgabe-Log druckt Player collected coin .
Code-Erkl?rungDie folgenden Abschnitte beschreiben, wie das Skript in mehr Details funktioniert.
Dienste und Variablen initialisieren
Wie bei viel dem 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 macht gefolgte Profile:
Holen Sie sich Referenzen auf alle Münzen - Das Skript fragt dann die 3D-Arbeitsbereich für alle Münzen-Objekte mit dem Class.Instance:GetChildren()|GetChildren() -Methode. Dieser Methode gibt ein Array zurück, das alle mit dem Objekt in Verbindung gebracht sind, was in diesem Fall der Workspace.World.Coins -Ordner ist, den Sie zuvor erstellt haben.
Definiert eine globale Variable - Die COOLDOWN Variable wird später verwendet, um zu definieren, wie lange ein Münze nachdem sie gesammelt wurde deaktiviert werden soll.
Dienste und Variablen initialisierenlocal Workspace = game:GetService("Workspace")local Players = game:GetService("Players")local coinsFolder = Workspace.World.Coinslocal coins = coinsFolder:GetChildren()local COOLDOWN = 10...
Ereignishändler definieren
Die Roblox-Engine simuliert die 3D-Welt und behandelt eine Menge der Logik, um Ereignisse in Bezug auf Rendern, Physik und Netzwerke 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 der Engine den Rest erledigt. In diesem Fall hören Sie auf und verarbe
Erkennt, ob die Münze aktiviert ist - Jeder Instance hat ein Enabled -Boolean-Attribut, das definiert, ob das Objekt in der 3D-Welt existiert oder nicht. Sie können Instanz-Attributs mit der Methode 0> Class.Instance:GetAttribute()|GetAttribute()0> erhalten.
Erkennt, ob ein Spieler die Münze berührt hat - Wenn eine Münze aktiviert ist, verwendet die Methode den Player-Dienst, um zu überprüfen, ob das Objekt, das die Münze berührt hat, tatsächlich ein Spieler:inist. Wenn ein Berührungsevent auftreten kann, überprüft die Roblox-Engine das Objekt, das die Münze berührt hat, als otherPart -Parameter. Das Skript
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 erneut für die Sammlungen. task.wait() wird anstelle von wait()
Event-Handler definierenlocal function onCoinTouched(otherPart, coin)if coin:GetAttribute("Enabled") thenlocal character = otherPart.Parentlocal player = Players:GetPlayerFromCharacter(character)if player then-- Der Spieler hat eine Münze berührtcoin.Transparency = 1coin:SetAttribute("Enabled", false)print("Player collected coin")task.wait(COOLDOWN)coin.Transparency = 0coin:SetAttribute("Enabled", true)endendend
Verbindung mit dem Ereignishändler herstellen
Alle simulierten 3D-Objekte erben von BasePart und haben daher ein Class.BasePart.Touched|Touched() -Ereignis. Die folgende Schleife verbindet den onTouchedEvent() -Griff mit jedem Münzen-Touch-Ereignis, indem die gefolgte ProfileSchritte ausgeführt werden:
Loop durch alle Münzen - Loop durch jede der Münzen mit der allgemeinen Iteration.
Verbinden Sie den Handler mit dem Ereignis - In jeder Wiederholung der Loop wird die Münze standardmäßig aktiviert, sodass sie während des frühen Starts der Erlebnisin der 3D-Welt sichtbar ist. Die onCoinTouched() -Münzen-Methode ist auch mit dem
Verbindung mit dem Ereignishändlerfor _, coin in coins docoin:SetAttribute("Enabled", true)coin.Touched:Connect(function(otherPart)onCoinTouched(otherPart, coin)end)end
Spieltest den Mechaniker
Es ist an der Zeit, zu sehen, ob die Münzsammelmechanik wie erwartet funktioniert. Um dein Erlebnis zu testen:
In der Menüleiste klicken Sie auf die Schaltfläche Spielen . Studio betritt den Spieltest-Modus.
Bewegen Sie Ihren Charakter, um eine Münze zu berühren. Wenn Ihre Skripte richtig funktionieren, wird das Ausgabe-Fenster angezeigt, in dem Player collected coin und die Münze 10 Sekunden lang verschwindet, bevor sie wiederanzeigt wird.