Erstellen Sie einen Münzsammlungsmechaniker

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


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:

  1. In dem Explorer-Fenster , fügen Sie einen neuen Ordner in den World-Ordner und benennen Sie ihn dann Coins um.

  2. Fügen Sie einen Zylinder Teil in den Münzen -Ordner ein, und benennen Sie den Teil dann in Münze um.

    Studio's Explorer window with the Coin part highlighted. The hierarchy of the Workspace to World folder to Coins folder to Coin part is also highlighted.
  3. 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.
    A close up view of a gold coin next to two gray cylinder sea stacks on the island.
  4. Duplizieren Sie ein paar weitere Münzen und platzieren Sie sie auf der Karte für Testzwecke.

    Studio's Explorer window with multiple Coin parts highlighted under the Coins folder. A view of multiple coins on the island and two gray cylinder sea stacks.

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:

  1. In dem Explorer-Fenster bewegen Sie den Mauszeiger über ServerScriptService und klicken Sie auf die Schaltfläche . Ein Kontextmenü wird angezeigt.

  2. 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.

    Studio's Explorer window with both ServerScriptService's plus icon and Script object highlighted.
  3. Renennen Sie das Skript in CoinService um.

    Studio's Explorer window with the CoinService script highlighted under ServerScriptService.
  4. Ersetzen Sie den Standardcode durch den folgenden Codes:


    -- Dienste und Variablen initialisieren
    local Workspace = game:GetService("Workspace")
    local Players = game:GetService("Players")
    local coinsFolder = Workspace.World.Coins
    local coins = coinsFolder:GetChildren()
    local COOLDOWN = 10
    -- Verdefinieren des Ereignishändlers
    local function onCoinTouched(otherPart, coin)
    if coin:GetAttribute("Enabled") then
    local character = otherPart.Parent
    local player = Players:GetPlayerFromCharacter(character)
    if player then
    -- Der Spieler hat eine Münze berührt
    coin.Transparency = 1
    coin:SetAttribute("Enabled", false)
    print("Player collected coin")
    task.wait(COOLDOWN)
    coin.Transparency = 0
    coin:SetAttribute("Enabled", true)
    end
    end
    end
    -- Ereignis-Listen einrichten
    for _, coin in coins do
    coin:SetAttribute("Enabled", true)
    coin.Touched:Connect(function(otherPart)
    onCoinTouched(otherPart, coin)
    end)
    end

    Jetzt verschwindet die Münze, wenn ein Spieler eine Münze berührt, und das Ausgabe-Log druckt Player collected coin .

    Die 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:

    • Erhalten Sie Service-Instanzen - Roblox-Dienste bieten integrierte Funktionen für häufige Funktionen. Das Skript erstellt zuerst Instanzen des Workspace-Dienstes, der alle Objekte in der 3D-Welt enthält, und des Player-Dienstes, der alle Verbindungen mit Ihrem Erlebnis verwaltet und enthält.

    • 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 initialisieren

      local Workspace = game:GetService("Workspace")
      local Players = game:GetService("Players")
      local coinsFolder = Workspace.World.Coins
      local 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 definieren

      local function onCoinTouched(otherPart, coin)
      if coin:GetAttribute("Enabled") then
      local character = otherPart.Parent
      local player = Players:GetPlayerFromCharacter(character)
      if player then
      -- Der Spieler hat eine Münze berührt
      coin.Transparency = 1
      coin:SetAttribute("Enabled", false)
      print("Player collected coin")
      task.wait(COOLDOWN)
      coin.Transparency = 0
      coin:SetAttribute("Enabled", true)
      end
      end
      end

    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ändler

      for _, coin in coins do
      coin: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:

  1. In der Menüleiste klicken Sie auf die Schaltfläche Spielen . Studio betritt den Spieltest-Modus.

    Studio's Home tab with the Play button highlighted in the menu bar.
  2. 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.

    Studio's Output window that displays confirmation that the player collected a coin.