Erstellen einer Münzsammlungsmechanik

*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, 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:

  1. Füge im Explorer -Fenster einen neuen Ordner in den Welt -Ordner ein und benenne ihn dann Münzen um.

  2. Füge ein Zylinder -Teil in den Münzen -Ordner ein und benenne das 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ä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.
    A close up view of a gold coin next to two gray cylinder sea stacks on the island.
  4. Dupliziere ein paar weitere Münzen und positioniere 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 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:

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

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

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

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


    -- 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
    -- 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
    -- Spieler berührte eine Münze
    coin.Transparency = 1
    coin:SetAttribute("Enabled", false)
    print("Player collected coin")
    task.wait(COOLDOWN)
    coin.Transparency = 0
    coin:SetAttribute("Enabled", true)
    end
    end
    end
    -- Event-Listen aktivieren
    for _, coin in coins do
    coin:SetAttribute("Enabled", true)
    coin.Touched:Connect(function(otherPart)
    onCoinTouched(otherPart, coin)
    end)
    end

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

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

    • Erhalte Dienstinstanzen - Roblox-Dienste bieten integrierte Funktionen für gemeinsame Funktionen.Das Skript erhält zuerst Instanzen des Workspace Dienstes, der jedes Objekt in der 3D-Welt enthält, und des Player Dienstes, der alle Spieler verwaltet und mit deiner Erlebnisverbunden sind.

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

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

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

    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-Handlers

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

  1. Klicke in der Toolbar auf die Schaltfläche Spielen . Studio wechselt in den Spieltest-Modus.

    Play button highlighted in Studio's playtesting options.
  2. 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.

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