RunService
*Ce contenu est traduit en utilisant l'IA (Beta) et peut contenir des erreurs. Pour consulter cette page en anglais, clique ici.
RunService contient des méthodes et des événements pour la gestion du temps ainsi que pour la gestion du contexte dans lequel une expérience ou un script s'exécute.Des méthodes comme IsClient() , IsServer() et IsStudio() peuvent vous aider à déterminer dans quel contexte le code s'exécute.Ces méthodes sont utiles pour ModuleScripts qui peuvent être requises par les scripts du client et du serveur.De plus, IsStudio() peut être utilisé pour ajouter des comportements spéciaux pour les tests dans Studio.
RunService abrite également des événements qui permettent à votre code de respecter la boucle de boucle de cadre de Roblox, tels que PreRender , PreAnimation , PreSimulation , PostSimulation et Heartbeat .Sélectionner l'événement approprié à utiliser dans n'importe quel cas est important, vous devez donc lire calendrier de tâches pour prendre une décision informée.
Résultats du test de contexte
<th><code>Class.RunService:IsStudio()|IsStudio</code></th><th><code>Class.RunService:IsClient()|IsClient</code></th><th><code>Class.RunService:IsServer()|IsServer</code></th><th><code>Class.RunService:Est-il modifiable()|IsEdit</code></th><th><code>Class.RunService: est en cours d'exécution()|IsRunning</code></th><th><code>Class.RunService:IsRunMode()|IsRunMode</code></th></tr></thead><tbody><tr><td>Joueur en direct</td><td><code>faux</code> ></td><td><code>vrai</code> ></td><td><code>faux</code> ></td><td /><td /><td /></tr><tr><td>Serveur en direct</td><td><code>faux</code> ></td><td><code>faux</code> ></td><td><code>vrai</code> ></td><td /><td /><td /></tr><tr><td>Mode d'édition</td><td><code>vrai</code></td><td><code>vrai</code></td><td><code>vrai</code></td><td><code>vrai</code></td><td><code>faux</code></td><td><code>faux</code></td></tr><tr><td>Édition collaborative</td><td><code>vrai</code></td><td><code>vrai</code></td><td><code>faux</code></td><td><code>vrai</code></td><td><code>faux</code></td><td><code>faux</code></td></tr><tr><td>Mode d'exécution</td><td><code>vrai</code></td><td><code>vrai</code></td><td><code>vrai</code></td><td><code>faux</code></td><td><code>vrai</code></td><td><code>vrai</code></td></tr><tr><td>Mode de jeu (client)</td><td><code>vrai</code></td><td><code>vrai</code></td><td><code>faux</code></td><td><code>faux</code></td><td><code>vrai</code></td><td><code>faux</code></td></tr><tr><td>Mode de jeu (serveur)</td><td><code>vrai</code></td><td><code>faux</code></td><td><code>vrai</code></td><td><code>faux</code></td><td><code>vrai</code></td><td><code>vrai</code></td></tr><tr><td>Test d'équipe (joueur)</td><td><code>vrai</code></td><td><code>vrai</code></td><td><code>faux</code></td><td><code>faux</code></td><td><code>vrai</code></td><td><code>faux</code></td></tr><tr><td>Test d'équipe (serveur)</td><td><code>faux</code></td><td><code>faux</code></td><td><code>vrai</code></td><td><code>faux</code></td><td><code>vrai</code></td><td><code>faux</code></td></tr></tbody>
Milieu |
---|
Résumé
Propriétés
Méthodes
Donné un nom de chaîne d'une fonction et une priorité, cette méthode lie la fonction à RunService.PreRender .
Renvoie si l'environnement actuel est exécuté sur le client.
Renvoie si l'environnement actuel est en mode Edit .
Renvoie si le bouton Exécuter a été appuyé pour exécuter la simulation dans Studio.
Renvoie si l'expérience est actuellement en cours d'exécution.
Renvoie si l'environnement actuel est exécuté sur le serveur.
Renvoie si l'environnement actuel est exécuté dans Studio.
Pause la simulation de l'expérience si elle est en cours d'exécution, en suspendant la physique et les scripts.
Exécute la simulation du jeu, exécute la physique et les scripts.
Arrête la simulation de l'expérience si elle fonctionne.
Dé relie une fonction qui était liée à la boucle de rendu en utilisant RunService:BindToRenderStep() .
Évènements
Lance chaque cadre, après que la simulation physique ait terminé.
Lance chaque cadre, après que la simulation physique ait terminé.
Lance chaque cadre, avant la simulation de physique mais après le rendu.
Lance chaque cadre, avant que le cadre ne soit rendu.
Lance chaque cadre, avant la simulation physique.
Lance chaque cadre, avant que le cadre ne soit rendu.
Lance chaque cadre, avant la simulation physique.
Propriétés
ClientGitHash
RunState
Méthodes
BindToRenderStep
La fonction BindToRenderStep() lie une fonction personnalisée à être appelée à un moment spécifique pendant l'étape de rendu.Il y a trois arguments principaux : name , priority , et ce que function appeler.
Comme il est lié au processus de rendu du client, BindToRenderStep() ne peut être appelé que sur le client.
Nom
Le paramètre name est une étiquette pour le lien et peut être utilisé avec RunService:UnbindFromRenderStep() si le lien n'est plus nécessaire.
local RunService = game:GetService("RunService")
local function functionToBind() end
-- Lier la fonction ci-dessus à la binding nommée « tempBinding »
RunService:BindToRenderStep("tempBinding", 1, functionToBind)
-- Débindage de la fonction liée à "tempBinding"
RunService:UnbindFromRenderStep("tempBinding")
Priorité
Le priority de la fixation est un entier ; il détermine quand pendant l'étape de rendu d'appeler la fonction personnalisée.Plus ce nombre est bas, plus rapidement la fonction personnalisée sera appelée.Si deux liens ont la même priorité, le moteur Roblox choisira aléatoirement l'un d'entre eux pour s'exécuter en premier.Les scripts de contrôle Roblox par défaut s'exécutent avec ces priorités spécifiques :
- Entrée du joueur : 100
- Contrôles de la caméra : 200 Pour commodité ; l'enumérité Enum.RenderPriority peut être utilisée pour déterminer la valeur entière pour définir une valeur de binding.Par exemple, pour faire un droit de liage avant la mise à jour de la caméra par défaut, soustrayez simplement 1 du niveau de priorité de la caméra.
Lors de l'utilisation de Enum.RenderPriority, n'oubliez pas d'utiliser .Value à la fin de l'Enum désiré. RunService:BindToRenderStep() ne fonctionnera pas si seulement l'Enum est utilisé posséder.
local RunService = game:GetService("RunService")
local function beforeCamera(delta)
-- Le code ici s'exécutera avant le script de caméra Roblox par défaut
end
RunService:BindToRenderStep("Before camera", Enum.RenderPriority.Camera.Value - 1, beforeCamera)
Fonction personnalisée et temps Delta
L'argument dernier ( function ) est la fonction personnalisée à appeler.Cette fonction sera passée un paramètre appelé deltaTime qui montre combien de temps s'est écoulé entre le début de l'étape de rendu précédente et le début de l'étape de rendu actuelle.
Toutes les mises à jour de rendu attendront jusqu'à ce que le code dans l'étape de rendu se termine.Assurez-vous que tout code appelé par BindToRenderStep() s'exécute rapidement et efficacement ; si le code prend trop de temps, les visuels d'expérience seront choppy.
Paramètres
Étiquette pour le lien qui peut être utilisé avec Unbind si le lien n'est plus nécessaire.
Priorité de la binding en tant qu'entier ; il détermine quand pendant l'étape de rendu d'appeler la fonction personnalisée.Plus ce nombre est bas, plus rapidement la fonction personnalisée sera appelée.Si deux liens ont la même priorité, le moteur Roblox choisira aléatoirement l'un d'entre eux pour s'exécuter en premier.
La fonction personnalisée est liée.
Retours
Échantillons de code
This code sample moves a GuiObject in a circle within its parent object using RunService's BindToRenderStep. It defines a parametric equation in a function to help with positioning the GuiObject.
To try this code out, put a ScreenGui in the StarterGui. Inside the ScreenGui, insert a Frame with a LocalScript. Paste this code into the LocalScript, then play the game. Watch the Frame travel counterclockwise within.
local RunService = game:GetService("RunService")
-- How fast the frame ought to move
local SPEED = 2
local frame = script.Parent
frame.AnchorPoint = Vector2.new(0.5, 0.5)
-- A simple parametric equation of a circle
-- centered at (0.5, 0.5) with radius (0.5)
local function circle(t)
return 0.5 + math.cos(t) * 0.5, 0.5 + math.sin(t) * 0.5
end
-- Keep track of the current time
local currentTime = 0
local function onRenderStep(deltaTime)
-- Update the current time
currentTime = currentTime + deltaTime * SPEED
-- ...and the frame's position
local x, y = circle(currentTime)
frame.Position = UDim2.new(x, 0, y, 0)
end
-- This is just a visual effect, so use the "Last" priority
RunService:BindToRenderStep("FrameCircle", Enum.RenderPriority.Last.Value, onRenderStep)
--RunService.RenderStepped:Connect(onRenderStep) -- Also works, but not recommended
This example shows how to bind a simple function to the render step. All this function does is print how much time passed between the last render step and the current one. Note that this code will need to be in a LocalScript to run.
local RunService = game:GetService("RunService")
local function checkDelta(deltaTime)
print("Time since last render step:", deltaTime)
end
RunService:BindToRenderStep("Check delta", Enum.RenderPriority.First.Value, checkDelta)
This example uses the RunService to bind and unbind a function named printHello. First, we bind the function to the RenderStep so that fires every step. Then, after we wait 5 seconds (wait(5)), we unbind the function.
local RunService = game:GetService("RunService")
-- Step 1: Declare the function and a name
local NAME = "Print Hello"
local function printHello()
print("Hello")
end
-- Step 2: Bind the function
RunService:BindToRenderStep(NAME, Enum.RenderPriority.First.Value, printHello)
-- Step 3: Unbind the function
RunService:UnbindFromRenderStep(NAME)
IsClient
Si le code qui a invoqué cette méthode s'exécute dans un contexte client (dans un LocalScript , dans un ModuleScript requis par un LocalScript , ou dans un Script avec RunContext défini à Enum.RunContext.Client ), cette méthode retournera true .Dans tous les autres cas, cette méthode renverra false .
Si cette méthode renvoie true , l'environnement actuel peut accéder à des fonctionnalités réservées aux clients comme RunService.PreRender ou Players.LocalPlayer .
Retours
Si l'environnement actuel exécute le client.
IsEdit
Cette méthode renvoie si l'environnement actuel est en mode « modifier», par exemple dans Studio lorsque l'expérience n'est pas en cours d'exécution.
IsEdit() retournera l'inverse de IsRunning(), sauf lorsque la simulation a été interrompue, auquel cas les deux méthodes retourneront false .
Retours
Si l'environnement actuel est en mode « modifier».
IsRunMode
Cette méthode renvoie si le bouton Exécuter a été pressé pour exécuter la simulation dans Studio.Il continuera à retourner true si la simulation a été interrompue en utilisant le bouton Pause ; cependant, une fois qu'elle a été arrêtée en utilisant le bouton Arrêter , elle reviendra à retourner false .
Notez que Studio entre seulement en mode « lancer» lorsque le bouton Exécuter est pressé, et non le bouton Jouer .Notez également que cette méthode renverra false si la simulation a été démarrée en utilisant RunService:Run() plutôt que le bouton Exécuter .
Retours
Si le bouton Exécuter a été appuyé pour exécuter la simulation dans Studio.
IsRunning
Renvoie si l'expérience est actuellement en cours d'exécution, ce qui signifie que la simulation a été exécutée en utilisant les boutons Exécuter ou Jouer .
IsRunning() retournera toujours l'inverse de IsEdit() sauf lorsque la simulation a été interrompue, auquel cas les deux méthodes retourneront false .
Retours
Si l'expérience est actuellement en cours d'exécution.
IsServer
Cette méthode renvoie si l'environnement actuel est exécuté sur le serveur.Si le code qui a invoqué cette méthode s'exécute dans un contexte de serveur (dans un Script avec RunContext défini sur Enum.RunContext.Server ou Enum.RunContext.Legacy , ou dans un ModuleScript requis par un Script ), cette méthode retournera true .Dans tous les autres cas, cette méthode renverra false .
Si cette fonction renvoie true, l'environnement actuel peut accéder à des fonctionnalités serveur uniquement comme ServerStorage ou ServerScriptService .
Retours
Si l'environnement actuel est exécuté sur le serveur.
IsStudio
Cette méthode renvoie si l'environnement actuel est exécuté dans Studio. Elle peut être utilisée pour envelopper du code qui ne doit être exécuté que lors des tests dans Studio.
Retours
Si l'environnement actuel est exécuté dans Studio.
Pause
Cette méthode met en pause la simulation de l'expérience si elle est en cours d'exécution, en suspendant la physique et les scripts.La simulation peut être lancée en utilisant Run() ou le bouton Exécuter dans Studio ; lorsque la simulation est interrompue, IsRunning() retournera false .
Retours
Run
Cette méthode exécute la simulation de l'expérience (physique et scripts).Lorsque la simulation est en cours d'exécution, IsRunning() retournera true .Cependant, IsRunMode() ne retournera que true si la simulation a été démarrée en utilisant le bouton Exécuter dans Studio.
Retours
Stop
Cette méthode arrête la simulation de l'expérience si elle fonctionne.Lorsque la simulation est arrêtée, IsRunning() retournera false et IsEdit() retournera true .
En contraste avec le bouton Arrêter dans Studio, l'appel de cette méthode ne restaurera pas l'expérience à l'état dans lequel elle se trouvait avant que la simulation ne soit lancer.Cela signifie que toutes les modifications apportées à l'expérience par la simulation physique et les scripts persisteront après la fin de la simulation.
Retours
UnbindFromRenderStep
Donné un nom d'une fonction envoyée à BindToRenderStep() , cette méthode désattachera la fonction d'être appelée pendant PreRender .Cela est utilisé pour désolidariser les fonctions liées une fois qu'elles ne sont plus nécessaires, ou lorsqu'elles n'ont plus besoin de déclencher chaque étape.
S'il n'y a pas de fonction liée par le nom donné, cette méthode ne prend aucune action et se poursuit sans élever une erreur.
Paramètres
Le nom de la fonction étant désolidarisée.
Retours
Évènements
Heartbeat
L'événement Heartbeat se déclenche à chaque cadre, après que la simulation physique ait terminé.L'argument deltaTime indique le temps écoulé depuis le cadre précédent.
Cet événement est quand la plupart des scripts s'exécutent.Il se produit à la fin de chaque cadre et c'est aussi quand les scripts d'attente sont exécutés, comme ceux programmés avec la bibliothèque task.Heartbeat est couramment utilisé pour les tâches périodiques, telles que la mise à jour des systèmes de jeu principaux comme la régénération de la santé.
Après cette étape, le moteur envoie des mises à jour de propriété et des événements au serveur ou aux clients qui sont ensuite reçus comme partie de l'étape de réception de la réplication.
Paramètres
Le temps (en secondes) écoulé depuis le cadre précédent.
PostSimulation
L'événement PostSimulation se déclenche à chaque cadre, après que la simulation physique ait terminé.L'argument deltaTimeSim indique le temps auquel le cadre actuel a effectué la simulation de physique, sans tenir compte du ralentissement de la physique.
Cet événement est utile pour effectuer des ajustements finaux du résultat de la simulation. Après cette phase, le moteur déclenche l'événement Heartbeat.
Paramètres
Le temps (en secondes) que le cadre actuel a fait passer la simulation physique, sans tenir compte du ralentissement de la physique.
PreAnimation
L'événement PreAnimation se déclenche à chaque cadre, avant la simulation physique mais après le rendu.L'argument deltaTimeSim indique le temps auquel la fenêtre actuelle a fait des animations d'arrêt.
Cet événement est utile pour modifier des objets d'animation, comme ajuster leur vitesse ou leur priorité.Une fois l'événement PreAnimation terminé, le moteur procède à l'exécution de ces animations, mettant à jour les transformations jointes qui seront utilisées plus tard pour mettre à jour les objets pendant la simulation physique.
Une fois les animations terminées, le moteur déclenche l'événement PreSimulation.
Paramètres
Le temps (en secondes) que l'animation de cadre actuelle a franchi.
PreRender
L'événement PreRender (remplacement pour RenderStepped) déclenche chaque cadre, avant que le cadre ne soit rendu.L'argument deltaTimeRender indique le temps écoulé depuis le cadre précédent.
Cet événement vous permet d'exécuter du code et de mettre à jour le monde avant qu'il ne soit dessiné sur l'écran d'un joueur.Cela est utile pour les ajustements de dernière minute tels que le changement de la position des objets, la mise à jour des animations ou la préparation des effets visuels, mais il doit être utilisé de manière parcimonieuse car le moteur ne peut pas commencer à rendre le cadre jusqu'à ce que le code s'exécute dans cet événement ait terminé.
Comme PreRender est côté client, il ne peut être utilisé qu'en LocalScript , dans un ModuleScript requis par un LocalScript , ou dans un Script avec RunContext défini sur Enum.RunContext.Client .
Après la phase PreRender, la phase de simulation commence avec l'événement PreAnimation.
Paramètres
Le temps (en secondes) écoulé depuis le cadre précédent.
PreSimulation
L'événement PreSimulation (remplacement de Stepped) déclenche chaque cadre, avant la simulation physique.L'argument deltaTimeSim indique le temps auquel le cadre actuel effectuera la simulation de physique, sans tenir compte du ralentissement de la physique.
Cet événement est utile pour ajuster des propriétés telles que la vitesse ou les forces juste avant qu'elles ne soient appliquées en tant que partie de la simulation.La simulation s'exécute ensuite, potentiellement plusieurs fois, car le solveur de physique fonctionne à une fréquence plus élevée que les autres systèmes d'engine.Une fois cela terminé, l'événement PostSimulation est déclenché.
Paramètres
Le temps (en secondes) que le cadre actuel effectuera la simulation de physique, sans tenir compte du ralentissement de la physique.
RenderStepped
Lance chaque cadre, avant que le cadre ne soit rendu.
Note de migration
Cet événement a été remplacé par PreRender qui doit être utilisé pour le nouveau travail.
Paramètres
Le temps (en secondes) écoulé depuis le cadre précédent.
Stepped
Lance chaque cadre, avant la simulation physique.
Note de migration
Cet événement a été remplacé par PreSimulation qui doit être utilisé pour le nouveau travail.
Paramètres
La durée (en secondes) pendant laquelle RunService a fonctionné.
Le temps (en secondes) écoulé depuis le cadre précédent.