Skripte hinzufügen

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

Zeit, all diese Arbeit zusammenzubringen! Jetzt, da du die Strahl- und Partikelkomponenten erstellt hast, fügst du drei vorgefertigte Skripte hinzu.Diese Skripte verwalten das Tutorial, indem sie Komponenten sagen, wann sie was tun sollen.Zum Beispiel erzeugen die Skripte Strahlen für neue Spieler und emittieren Partikel, wenn sie mit Zielen interagieren.

Strahl und Partikel speichern

Bevor die Skripte hinzugefügt werden, müssen der Strahl und die Partikel an einen Ort verschoben werden, an dem die Skripte Kopien von ihnen erstellen können, wie es erforderlich ist.

  1. In ReplicatedStorage , erstelle einen neuen Ordner mit dem Namen PlayerTutorial . Verschiebe den Tutorial-Strahl aus dem Testplayer in den neuen Ordner.

  2. In ServerStorage erstellen Sie einen Ordner mit dem Namen TutorialParticles .Bewegen Sie die Ausbruch -Partikel aus dem TestPlayer in diesen Ordner.

  3. Sobald der Strahl- und Partikelstrahler bewegt wurde, brauchst du den TestPlayer nicht mehr. Löschen TestPlayer, da das Skript bei Beendigung mit echten Spielern arbeiten wird.

Erstelle Ereignisse

Jedes Mal, wenn Spieler mit einem Ziel interagieren, muss das Tutorial-Skript wissen, um den Fortschritt dieses Spieler:inzu aktualisieren und den Partikeleffekt zu emittieren.Um Skripte zu informieren, können Signale mit Ereignissen verschickt werden.

  1. In ReplicatedStorage > PlayerTutorial erstellen Sie zwei Remote-Ereignis -Objekte. Benennen Sie sie NextGoal und TutorialEnd .

Füge die Skripte hinzu

Die drei Skripte unten suchen nach dem PartikelEmitter und den Beam-Objekten, die zuvor erstellt wurden, und verwalten das Tutorial-System.

  1. In ReplicatedStorage > PlayerTutorial > erstelle ein neues Modulskript mit dem Namen TutorialManager .

    Ersetzen Sie den Standardcode durch Kopieren und Einfügen des gesamten Codes unten.


    local TutorialManager = {}
    local ReplicatedStorage = game:GetService("ReplicatedStorage")
    local tutorialFolder = ReplicatedStorage:WaitForChild("PlayerTutorial")
    local TutorialEndEvent = tutorialFolder:WaitForChild("TutorialEnd")
    local NextGoalEvent = tutorialFolder:WaitForChild("NextGoal")
    -- Beachten Sie, dass Zielteile in der Tabelle bestellt werden müssen, sonst kann die Zielbestellung im Spiel unterschiedlich sein
    local goalParts = {
    workspace.TutorialGoals.GoalPart1,
    workspace.TutorialGoals.GoalPart2
    }
    local function checkTutorialEnd(player, goalParts)
    local currentIndex = player:WaitForChild("GoalProgress")
    return currentIndex.Value >= #goalParts
    end
    local function finishTutorial(player)
    local playerBeam = player.Character.HumanoidRootPart:FindFirstChildOfClass("Beam")
    playerBeam:Destroy()
    print(player.Name .. " finished the tutorial")
    -- Platzhalter für weiteren Codes. Z. B. wenn du Nachrichten an den Server senden möchtest, um andere Aufgaben auszuführen
    end
    function TutorialManager.interactGoal(player)
    NextGoalEvent:FireServer()
    end
    function TutorialManager.getTutorialGoals()
    return goalParts
    end
    function TutorialManager.nextGoal(player, goalParts)
    if checkTutorialEnd(player, goalParts) then
    finishTutorial(player)
    else
    -- Erhöhe den Zieltracker des Spieler:in
    local currentGoalIndex = player:WaitForChild("GoalProgress")
    currentGoalIndex.Value += 1
    end
    end
    -- Erstellt einen int-Wert, um den Fortschritt des Spieler:indurch die Tutorial-Ziele lokal zu verfolgen
    function TutorialManager.setupPlayerProgress(player)
    local currentGoalProgress = Instance.new("IntValue")
    currentGoalProgress.Name = "GoalProgress"
    currentGoalProgress.Value = 1
    currentGoalProgress.Parent = player
    end
    return TutorialManager

    Dieses Skript führt Code aus, um den Fortschritt eines Spieler:inim Tutorial zu verwalten.Dazu gehören Aufgaben wie der Ausführung von Code zum Interagieren mit Zielen oder was passiert, wenn das Tutorial beendet ist.

  2. In ServerScriptService erstellen Sie ein neues Skript mit dem Namen TutorialParticles .

    Füge den Code unten ein.


    local Players = game:GetService("Players")
    local ReplicatedStorage = game:GetService("ReplicatedStorage")
    local ServerStorage = game:GetService("ServerStorage")
    local tutorialFolder = ReplicatedStorage:WaitForChild("PlayerTutorial")
    local NextGoalEvent = tutorialFolder:WaitForChild("NextGoal")
    local EMIT_RATE = 50
    local function playParticleBurst(player)
    local character = player.Character or player.CharacterAdded:Wait()
    local humanoidRootPart = character:WaitForChild("HumanoidRootPart")
    local particleAttachment = humanoidRootPart:WaitForChild("ParticleAttachment")
    -- Gehe durch Partikel auf dem Anhang und spiele sie entsprechend der Art des Partikels ab
    for _, particle in particleAttachment:GetChildren() do
    if particle:IsA("ParticleEmitter") then
    particle:Emit(EMIT_RATE)
    end
    end
    end
    local function setupPlayerParticles(player)
    player.CharacterAdded:Connect(function(character)
    local humanoidRootPart = character:WaitForChild("HumanoidRootPart")
    local playerParticleAttachment = Instance.new("Attachment")
    playerParticleAttachment.Name = "ParticleAttachment"
    playerParticleAttachment.Parent = humanoidRootPart
    -- Klone Partikel im Ordner, auch wenn es mehr als eine gibt und sie dem Spieler:inbeigefügt werden
    for _, emitter in ServerStorage.TutorialParticles:GetChildren() do
    emitter:Clone().Parent = playerParticleAttachment
    end
    end)
    end
    Players.PlayerAdded:Connect(setupPlayerParticles)
    NextGoalEvent.OnServerEvent:Connect(playParticleBurst)

    Dieses Skript spielt die Explosionspartikel ab, wenn Spieler mit Zielen interagieren.Es gibt auch eine Variable namens EMIT_RATE, die festlegt, wie viele Partikel während einer Interaktion entstehen.

  3. In StarterPlayer > StarterPlayerScripts erstellen Sie ein neues Lokales Skript mit dem Namen Tutorialskript .

    Dann füge das Skript unten ein. Dieses Skript erstellt und verwaltet den Strahl, der Spieler führt.


    local Players = game:GetService("Players")
    local ReplicatedStorage = game:GetService("ReplicatedStorage")
    local tutorialFolder = ReplicatedStorage:WaitForChild("PlayerTutorial")
    local TutorialManager = require(tutorialFolder:WaitForChild("TutorialManager"))
    local TutorialEndEvent = tutorialFolder:WaitForChild("TutorialEnd")
    local player = Players.LocalPlayer
    local goalParts = TutorialManager.getTutorialGoals()
    local playerBeam = nil
    local goalIndex = nil
    local function getTargetAttachment()
    local currentTarget = goalParts[goalIndex.Value]
    local interactionPart = currentTarget:FindFirstChild("InteractionPart")
    local attachment = interactionPart and interactionPart:FindFirstChildOfClass("Attachment")
    if not attachment then
    attachment = Instance.new("Attachment")
    attachment.Name = "BeamAttachment"
    attachment.Parent = currentTarget
    end
    return attachment
    end
    local function updateBeamTarget()
    playerBeam = player.Character.HumanoidRootPart:FindFirstChildOfClass("Beam")
    local targetBeamAttachment = getTargetAttachment()
    if targetBeamAttachment then
    playerBeam.Attachment1 = targetBeamAttachment
    else
    warn("Attachment not found in a goal. Check that goals have attachments or they're included under the InteractionPart")
    end
    end
    local function setupGoals()
    for _, part in goalParts do
    local interactionPart = part:FindFirstChild("InteractionPart")
    local proximityPrompt = interactionPart and interactionPart:FindFirstChild("ProximityPrompt")
    if proximityPrompt then
    proximityPrompt.Triggered:Connect(function(player)
    proximityPrompt.Enabled = false
    TutorialManager.nextGoal(player, goalParts)
    TutorialManager.interactGoal(player)
    end)
    else
    warn("Proximity prompt not included in goal. Add one to each goal part under the InteractionPart")
    end
    end
    end
    local function createBeamForCharacter(character)
    local humanoidRootPart = character:WaitForChild("HumanoidRootPart")
    local playerBeamAttachment = Instance.new("Attachment")
    local beamTemplate = tutorialFolder:WaitForChild("TutorialBeam")
    if not beamTemplate then
    warn("Tutorial Beam not found in ReplicatedStorage")
    end
    playerBeamAttachment.Name = "BeamAttachment"
    playerBeamAttachment.Parent = humanoidRootPart
    local targetBeamAttachment = getTargetAttachment()
    playerBeam = beamTemplate:Clone()
    playerBeam.Attachment0 = playerBeamAttachment
    playerBeam.Attachment1 = targetBeamAttachment
    playerBeam.Enabled = true
    playerBeam.Parent = humanoidRootPart
    end
    local function setupPlayer()
    setupGoals()
    TutorialManager.setupPlayerProgress(player)
    goalIndex = player:WaitForChild("GoalProgress")
    player.CharacterAdded:Connect(createBeamForCharacter)
    if player.Character then
    createBeamForCharacter(player.Character)
    end
    end
    setupPlayer()
    goalIndex.Changed:Connect(updateBeamTarget)
  4. Spiele das Projekt ab, um die Skripte zu testen. Wechsle von Stand zu Stand, indem du die Interaktionsfunktion verwendest, um zu sehen, ob der Code funktioniert.

Problemlösungstipps

Problem : Partikel spielen, wenn das Spiel beginnt.

  • Gehe in ServerStorage > Tutorial-Partikel > Explosion. Überprüfe Deaktiviert, um auszusteigen. Problem : Warnungen im Kompilator wie eine "unendliche Ausgabe".

  • Da das Skript nach bestimmten Objekten an bestimmten Orten sucht, ist es möglich, dass ein Teil falsch benannt wird.Überprüfe, ob der Name und die Lage jedes Teils im Spiel dem Tutorial entsprechen.

Skriptvorteile und Einschränkungen

Wenn du dieses Tutorial-System in deiner Erlebnisverwendest, denke daran, gefolgte Profile: Vorteile

  • Ereignisse wie TutorialEnd können verwendet werden, um andere Skripte auszulösen. Zum Instanzkannst du den Spielern ein spezielles Element vergeben, wenn dieses Ereignis ausgelöst wird.
  • Das TutorialParticles-Skript kann mehrere Partikel gleichzeitig spielen.Du kannst mehr Partikel in ServerStorage/TutorialParticles hinzufügen, um komplexere Effekte zu erzielen. Einschränkungen
  • Der Spielerfortschritt im Tutorial ist nicht dauerhaft, was bedeutet, dass du einen Weg finden musst, diesen Fortschritt zu speichern.Für Anleitungen siehe den Artikel: Daten speichern.