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 Partikelelemente erstellt hast, fügst du drei vordefinierte Skripte hinzu. Diese Skripte verwalten das Tutorial, indem sie Komponenten sagen, wann sie tun, was zu tun ist. Zum Beispiel erstellen die Skripte Balken für neue Spieler und emittieren Partikel, wenn sie mit Zielen interagieren.

Strahlen und Partikel speichern

Before adding the scripts, the beam and particles need to be moved to where the scripts will be able to make copies of them as needed.

  1. In ReplicatedStorage erstellen Sie einen neuen Ordner namens PlayerTutorial . Verschieben Sie TutorialBeam aus TestPlayer und in den neuen Ordner.

  2. In ServerStorage erstellen Sie einen Ordner namens TutorialParticles . Verschieben Sie die Burst -Partikel aus TestPlayer in diesen Ordner.

  3. Sobald der Strahl- und Partikel-Emitter bewegt ist, brauchst du nicht mehr den TestPlayer. Löschen TestPlayer, da das Skript mit echten Spielern abgeschlossen ist, wenn es fertig ist.

Ereignisse erstellen

Jedes Mal, wenn Spieler mit einem Ziel interagieren, muss der Tutorial-Skript wissen, damit es den Fortschritt dieses Spieler:inaktualisieren und den Partikeleffekt emittieren kann. Um Skripte zu informieren, können Signale mit Ereignissen gesendet werden.

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

Die Skripte hinzufügen

Die drei Skripte unten suchen nach den Partikel-Emitter und -Objekten, die früher erstellt wurden, und verwalten das Tutorial-System.

  1. In ReplicatedStorage > PlayerTutorial > erstellen Sie ein neues ModuleScript mit dem Namen TutorialManager .

    Ersetzen Sie den Standardcode, indem Sie den gesamten Code unten kopieren und einfügen.


    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, oder Goalteile können im Spiel anders 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 weitere Codes. Z. B. Wenn Sie Nachrichten an den Server senden möchten, 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öhen Sie den Zielverfolgungs-Inkrement des Spieler:in
    local currentGoalIndex = player:WaitForChild("GoalProgress")
    currentGoalIndex.Value += 1
    end
    end
    -- Erstellt einen int-Wert, um den Fortschritt des Spieler:inlokal durch die Zielvorgaben des Tutorials 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 Codes aus, um den Fortschritt eines Spieler:inim Tutorial zu verwalten. Dies beinhaltet Aufgaben wie das Ausführen von Code für das Interagieren mit Zielen oder das, was passiert, wenn das Tutorial abgeschlossen ist.

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

    Fügen Sie 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 die Partikel auf der Anbaut und spiele sie entsprechend der Partikelart
    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
    -- Klonen Sie Partikel in der Ordner, auch wenn es mehr als ein Teil ist, und fügen Sie ihn dem Spieler:in
    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 Platsparte, wenn Spieler mit Zielen interagieren. Es gibt auch eine Variable namens EMIT_RATE, die bestimmt, wie viele Partikel während einer Interaktion entstehen.

  3. In StarterPlayer > StarterPlayerScripts, erstellen Sie ein neues LocalScript mit dem Namen TutorialScript .

    Dann fügen Sie das Skript unten ein. Dieses Skript erstellt und verwaltet den Strahl, der verwendet wird, um die Spieler zu führen.


    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.Parent = humanoidRootPart
    playerBeam.Enabled = true
    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, um die Skripte zu testen. Bewegen Sie sich von Booth zu Booth, verwenden Sie die Interaktionsfunktion, um zu sehen, ob der Code funktioniert.

Troubleshooting-Tipps

Problem : Partikel spielen, wenn das Spiel beginnt.

  • Gehe in ServerStorage > Tutorial Particles > Burst. Überprüfen Sie, dass "Deaktiviert" ausist, um es zu deaktivieren. Problem: : Warnungen im Compiler wie "unendliches Ergebnis".

  • Da das Skript bestimmte Objekte an bestimmten Orten sucht, ist es möglich, dass ein Teil unzureichend benannt ist. Überprüfen Sie, dass der Name und die Lage jedes Teils im Spiel mit dem Tutorial übereinstimmt.

Skriptvorteile und -Einschränkungen

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

  • Ereignisse wie TutorialEnd können verwendet werden, um andere Skripte auszulösen. Zum Instanzkönnen Sie Spielern einen speziellen Gegenstand geben, wenn dieses Ereignis ausgelöst wird.
  • Das TutorialParticles-Skript kann mehrere Partikel gleichzeitig spielen. Sie können mehr Partikel in ServerStorage/TutorialParticles hinzufügen, um komplexere Effekte zu erstellen. Einschränkungen
  • Spielerfortschritt im Tutorial ist nicht dauerhaft, was bedeutet, dass Sie einige Möglichkeiten haben, diesen Fortschritt zu speichern. Für Richtlinien, siehe den Artikel: Saving Data.