Close
    Search Search

    Tutoriel : Guide d'expert sur les scripts

    Tutoriel : Guide d'expert sur les scripts

    Bienvenue! Si vous lisez ce didacticiel, vous devriez avoir lu les didacticiels pour les débutants, les débutants, les intermédiaires et les scripts avancés. À présent, vous devriez avoir toutes les compétences nécessaires pour créer un jeu entièrement fonctionnel. Ce didacticiel couvrira certains concepts aléatoires et non fondamentaux que vous pouvez utiliser à tout moment.


    Contenu

    Cocher()

    Cocher() est une fonction qui trouve l'heure Unix. Si vous ne savez pas ce que cela signifie, c'est le nombre de secondes qui se sont écoulées depuis l'époque Unix, qui est le 1er janvier 1970.



    Disons que je voulais trouver le temps qui s'est écoulé depuis que l'on a cliqué sur une interface graphique. Insérez un ScreenGui, un TextButton dans le ScreenGui et un script local dans le TextButton.

    local startTime = tick() script.Parent.Activated:Connect(function() local serverTime = tick() - startTime print(serverTime) end)

    Maintenant, il faudrait l'heure Unix actuelle, puis en soustraire le startTime.


    Interpolation linéaire

    Il s'agit d'une alternative pratique à l'interpolation, vous permettant d'animer en douceur une partie d'un point à un autre. Pour ce faire, vous pouvez simplement utiliser la fonction Lerp() sur le CFrame de la pièce.

    local GoalPart = game.Workspace.Part2 script.Parent.CFrame:Lerp(GoalPart.CFrame,0.5)

    Dans la fonction Lerp(x,y), x est le CFrame auquel vous voulez que la partie se termine, et le paramètre y est la décimale ou la fraction du chemin que vous voulez que la partie parcoure. Ainsi, par exemple, lorsque y = 1, la pièce se déplacerait jusqu'à la fin CFrame. Lorsque y = 0, la pièce ne bougerait pas du tout. Donc, dans ce cas, la partie se déplacerait à mi-chemin vers la partie2.

    UDim2

    UDim2 est l'équivalent Gui de Vector3. Au lieu de gérer un espace en 3 dimensions, il utilise un espace en 2D. Au lieu de prendre trois valeurs, il en prend quatre : Échelle X, Décalage X, Échelle Y et Décalage Y.

    Échelle

    L'échelle est la portion de l'écran entier. Ainsi, lorsque l'échelle X de la taille de l'interface graphique est définie sur 1, l'interface graphique occupe tout l'écran horizontalement. Lorsque l'échelle X est définie sur 0, l'interface graphique n'est pas visible.


    Compenser

    Le décalage est le nombre supplémentaire de pixels. Ainsi, lorsque la taille est définie sur (0,300,0,300), l'interface graphique sera de 300 X 300 pixels. Notez que vous devez éviter d'utiliser Offset si possible car l'interface graphique sera déformée en fonction de l'écran.

    Il est recommandé que lorsque vous travaillez avec ScreenGuis, utilisez TOUJOURS Échelle au lieu de Décalage. En effet, différents appareils ont des tailles d'écran différentes, de sorte que les interfaces utilisateur seraient différentes sur différents écrans.

    Manipulation de la caméra

    Changer la vue de la caméra est utile pour un certain nombre de choses. Par exemple, vous voudrez peut-être que la caméra regarde un certain outil lorsque le joueur est dans un magasin dans un jeu de simulation. Alors, ouvrez StarterPlayer > StarterPlayerScripts et insérez un script local.


    local Camera = game.Workspace.CurrentCamera local FocusPart = game.Workspace.FocusPart local CameraCFrame = game.Workspace.CameraPart wait(0.01) Camera.CameraType = Enum.CameraType.Fixed Camera.CFrame = CFrame.new(Vector3.new(CameraCFrame .Position)) Camera.Focus = FocusPart

    Dans l'avant-dernière ligne, le CameraType était défini sur fixe, il resterait donc à un moment donné. Ensuite, l'emplacement serait la position de CameraPart. Enfin, régler la mise au point ferait que la caméra regarde CameraPart.

    UserInputService

    UserInputService est un service principalement utilisé pour déclencher des commandes chaque fois qu'une certaine touche a été enfoncée. Dans ce didacticiel, vous apprendrez à créer une interface graphique d'inventaire qui apparaît chaque fois que la touche E est enfoncée.

    Insérez un ScreenGui et un script local dans StarterGui. Concevez l'interface graphique selon ce qui vous convient le mieux.


    Entrée a commencé

    InputBegan est un événement qui se déclenche chaque fois qu'un joueur essaie de faire une entrée dans le jeu. Cela fait référence non seulement à la saisie d'une touche, mais également à un clic gauche ou droit. Donc, dans le script local, entrez le code suivant :

    local UserInputService = game:GetService("UserInputService") UserInputService.InputBegan:Connect(function(input,gameProcessedEvent) end

    Maintenant, vous pouvez voir qu'il y a deux paramètres pour l'événement InputBegan : input et gameProcessedEvent. L'entrée fait référence à la manière dont le joueur a entré les données.

    gameProcessedEvent

    gameProcessedEvent est un booléen qui est vrai s'il n'y avait aucune autre raison pour la saisie de l'utilisateur. Par exemple, vous ne voudriez probablement pas que ce code se déclenche si l'utilisateur tapait E dans le chat. Vous ne voudriez pas que le code se déclenche si quelqu'un clique sur une interface graphique. Dans ces deux cas, gameProcessedEvent serait défini sur true. Donc, placez une instruction if qui ne se déclencherait que si gameProcessedEvent était false.

    local UserInputService = game:GetService("UserInputService") UserInputService.InputBegan:Connect(function(input,gameProcessedEvent) if gameProcessedEvent == false then end end)

    Maintenant, tout ce qu'il reste à faire est de vérifier si l'entrée était une pression sur une touche E. Ensuite, utilisez-le pour activer l'interface graphique.


    local UserInputService = game:GetService("UserInputService") UserInputService.InputBegan:Connect(function(input,gameProcessedEvent) if gameProcessedEvent == false then if input.Keycode == Enum.KeyCode.E then game.StarterGui.ScreenGui.Enabled = true fin fin fin)

    KeyCode fait référence à la touche qui a été enfoncée. Assurez-vous d'utiliser Enum; les valeurs de chaîne ne fonctionneront pas ici.

    EntréeTerminée

    InputEnded est un événement similaire, seulement il se déclenche lorsque l'entrée se termine. Ainsi, il se déclenche lorsqu'un utilisateur relâche le bouton ou la touche de sa souris.

    local UserInputService = game:GetService("UserInputService") UserInputService.InputEnded:Connect(function(input,gameProcessedEvent) if gameProcessedEvent == false then if input.Keycode == Enum.KeyCode.E then game.StarterGui.ScreenGui.Enabled = true fin fin fin)

    Les propriétés « activées »

    Les propriétés activées sont des propriétés booléennes définies sur true si l'appareil de l'utilisateur possède une certaine fonctionnalité. Les voici:

    • Accéléromètre activé : si l'appareil dispose d'un accéléromètre
    • GamepadEnabled : si l'appareil dispose d'une manette de jeu
    • GyroscopeEnabled : si l'appareil dispose d'un gyroscope
    • KeyboardEnabled : si l'appareil dispose d'un clavier
    • MouseEnabled : si l'appareil dispose d'une souris
    • TouchEnabled : si l'appareil dispose d'un pavé tactile
    • VREnabled : si l'utilisateur utilise un casque VR

    Les événements « Touch »

    Ces événements se déclenchent chaque fois que l'utilisateur effectue un certain mouvement à l'aide de son doigt sur un appareil mobile.

    • TouchEnded : Quand un joueur lâche son doigt
    • TouchLongPress : lorsqu'un joueur appuie sur l'écran
    • TouchMoved : lorsqu'un joueur bouge son doigt
    • TouchPan : lorsqu'un joueur fait glisser son doigt
    • TouchPinch : lorsqu'un joueur pince deux doigts
    • TouchRotate : lorsqu'un joueur fait pivoter ses doigts
    • TouchStarted : lorsqu'un joueur place son doigt sur un écran
    • TouchSwipe : lorsqu'un joueur glisse son doigt
    • TouchTap : lorsqu'un joueur tape avec son doigt
    • TouchTapInWorld : lorsqu'un joueur touche le monde en 3D.

    Outils de lecteur

    Vous voudrez peut-être également en savoir plus sur les outils de lecture. Ce sont des outils que vous pouvez voir dans la barre de raccourcis d'inventaire en bas de l'écran.

    Pour ce faire, concevez d'abord votre outil avec autant de composants que vous le souhaitez.

    Ensuite, recherchez la partie principale par laquelle vous voulez que le joueur tienne l'outil et renommez-la en "Handle". Notez que vous DEVEZ utiliser le nom exact ; Roblox n'acceptera aucune variation.

    Ensuite, soudez toutes les pièces ensemble à l'aide de contraintes de soudure. Vous pouvez le faire en mettant les pièces en surbrillance dans l'explorateur, puis en allant dans Modèle > Contraintes > Soudure.

    Insérez un outil dans l'espace de travail et placez toutes les pièces à l'intérieur. Vous remarquerez cependant que la pièce peut ne pas être placée dans votre main comme vous le souhaitez. Alors, installez un plugin d'éditeur de poignée d'outil, que vous pouvez trouver dans la bibliothèque Roblox, et utilisez-le pour déplacer et faire pivoter l'outil autant que vous en avez besoin. Si vous souhaitez que l'outil soit remis au joueur au début du jeu, placez-le dans StarterPack. Sinon, placez-le dans ServerStorage.

    MarketPlaceService

    MarketPlaceService est un service utilisé pour gérer les passes de jeu pour des cloches et des sifflets supplémentaires dans le jeu. Disons que je voulais que les utilisateurs obtiennent une épée s'ils ont le gamepass.

    Création de l'outil

    Créez l'outil comme vous l'avez fait dans la section précédente et placez-le dans ServerStorage. Vous pouvez trouver un modèle d'épée dans la boîte à outils.

    Création du Gamepass

    Si vous ne l'avez pas déjà fait, publiez votre jeu sur Roblox. Cela n'a pas besoin d'être public, mais cela peut si vous le souhaitez. Ensuite, allez sur la page du jeu sur le site Web, puis allez dans l'onglet Store sous la description et ajoutez un nouveau gamepass. Donnez-lui un nom et insérez une image de 150 x 150 pixels.

    Si vous souhaitez modifier le prix, cliquez sur l'icône représentant une roue dentée et sélectionnez « Configurer ». Ensuite, vous pouvez modifier le prix. Notez que pour les utilisateurs non premium, Roblox prendra 90% des Robux gagnés grâce aux gamepass. Pour les utilisateurs premium, ils prendront 30%.

    PromptGamePassAchat()

    PromtGamePassPurchase() est une fonction qui demande au joueur s'il souhaite acheter un gamepass. Il y a deux paramètres : le joueur et l'AssetId du gamepass.

    local MarketplaceService = game:GetService("MarketplaceService") local plr = game.Players.LocalPlayer MarketplaceService:PromptGamePassPurchase(plr,9382042)

    Bien sûr, vous devrez remplacer le numéro par l'ID du gamepass.

    InviteGamePassAchatTerminé

    Il s'agit d'un événement qui se déclenche lorsque le joueur achète le gamepass ou ferme la fenêtre contextuelle. Il a trois paramètres : le joueur, l'identifiant du gamepass et si le joueur a acheté le gamepass ou non.

    local MarketplaceService = game:GetService("MarketplaceService") MarketplaceService.PromptGamePassPurchasedFinished:Connect(function(plr,ID,wasPurchased) if wasPurchased == true then if ID == 3920472 then local Sword = game.ServerStorage.Sword:Clone() Sword .Parent = plr.Sac à dos fin fin fin)

    La première instruction if vérifie si le joueur a acheté ou non le gamepass. Le second vérifie si le gamepass que le joueur a acheté était celui qui avait l'intention de donner une épée au joueur.

    Animation

    Une animation est un moyen de faire bouger un modèle en douceur pour faire une danse, une vague ou autre.

    Création de l'animation

    Pour ce faire, allez dans l'onglet Plugins et sélectionnez "Build Rig". Selon le type de corps que vous souhaitez animer, sélectionnez un rig qui convient le mieux à votre animation. Un modèle R15 est un modèle avec 15 parties du corps, et un modèle R6 est un modèle qui a 6 parties. Choisissez le nombre de joints que vous souhaitez utiliser. La plate-forme devrait apparaître dans votre espace de travail.

    Ensuite, ouvrez l'éditeur d'animation et utilisez l'outil de sélection pour sélectionner le rig. Avec l'éditeur d'animation, vous pouvez faire pivoter le rig à certaines images clés comme vous le souhaitez.

    Lorsque vous avez terminé, cliquez sur le nom de l'animation et cliquez sur "Exporter". Parenté de la plate-forme dans la fenêtre de l'explorateur, vous devriez voir un objet avec le nom de l'animation et une icône carrée bleue. Faites un clic droit dessus et choisissez "Exporter vers Roblox". Ce sera un atout dans votre inventaire de joueur. Notez que les animations R6 ne fonctionneront pas avec les modèles R16, et vice versa.

    Ensuite, copiez et collez l'AssetId.

    Scénario de l'animation

    Il est maintenant temps d'animer le personnage. Insérez un script dans le personnage que vous souhaitez animer, puis un objet d'animation dans le script. Entrez l'AssetId de l'animation sous la propriété AnimationId de l'objet d'animation. Entrez ce qui suit dans le script :

    local animation = script:WaitForChild("Animation") local humanoid = script.Parent:WaitForChild("Humanoid") local LoadedAnimation = humanoid:LoadAnimation(animation) LoadedAnimation:Play()

    Encore une fois, WaitForChild cède jusqu'à ce que l'objet existe et ait été chargé. LoadAnimation prépare l'animation à jouer. Enfin, Play() fera jouer l'animation.

    Service de téléportation

    Parfois, vous constatez que dans les projets plus importants, le monde devient un peu trop grand pour son propre bien. Ainsi, vous pouvez avoir plusieurs endroits distincts dans le jeu. Si vous avez du mal à comprendre ce que cela signifie, c'est comme les serveurs Pro Towers de Tower of Hell. C'est toujours le même jeu, mais c'est dans un endroit différent.

    Pour ce faire, assurez-vous que votre jeu est publié. Cela peut être privé.

    Ensuite, allez dans l'onglet Affichage et ouvrez la fenêtre Game Explorer. Ensuite, passez la souris sur "Lieux" et cliquez sur le signe plus pour créer un lieu. Cliquez avec le bouton droit de la souris sur l'onglet Place dans l'explorateur de jeux pour copier le PlaceId.

    Créons un tapis de téléportation qui transporte les gens d'un endroit à l'autre. Insérez une pièce dans l'espace de travail et un script à l'intérieur.

    local TeleportService = game:GetService("TeleportService") local debounce = false script.Parent.Touched:Connect(function(hit) if debounce == false then debounce = true wait(2) end end)

    Jusqu'à présent, tout est assez explicite. Assurez-vous que vous utilisez un anti-rebond. Sinon, le serveur de l'utilisateur cessera de répondre.

    Donc, configurez une variable locale pour obtenir l'objet joueur. Ensuite, utilisez la fonction Teleport() pour insérer le script. Le premier paramètre est le PlaceId et le deuxième paramètre est l'objet player.

    local TeleportService = game:GetService("TeleportService") local debounce = false script.Parent.Touched:Connect(function(hit) if debounce == false then debounce = true local plr = game.Players:GetPlayerFromCharacter(hit.Parent) TeleportService :Teleport(29403734,plr) end end)

    Notez que cela ne fonctionnera pas dans Roblox Studio. Si vous souhaitez tester cela, allez sur un serveur en direct.

    Régions

    Une région est un espace en 3 dimensions dans le monde Roblox. Essayons de trouver des pièces dans un espace spécifique. Créez une pièce et redimensionnez-la pour qu'elle couvre toute la région. Ensuite, essayez de trouver les coordonnées du coin inférieur gauche de la pièce. Faites de même avec le coin supérieur droit. En d'autres termes, recherchez les valeurs X, Y et Z minimale et maximale de la pièce. Vous pouvez maintenant supprimer une pièce. Insérez ce script dans l'espace de travail :

    local reg = Region3.new(Vector3.new(minX,minY,minZ),Vector3.new(maxX,maxY,MaxZ))

    Remplacez les six espaces réservés par des coordonnées. La variable reg créera une nouvelle région avec ces coordonnées.

    Threads

    Qu'est-ce qu'un fil ?

    Un thread est un moyen pour un script d'exécuter plusieurs morceaux de code à la fois. Donc, si je voulais faire fonctionner deux boucles while en même temps avec des intervalles différents, cela ne déclencherait que la boucle la plus haute.

    while true do print(1) wait(2) end while true do --Ne fonctionnera pas. print(2) wait(2) end

    C'est parce que le code sera bloqué pour toujours dans la première boucle while.

    Un thread permettra au même script de les exécuter tous les deux à la fois.

    Fonction Spawn()

    La fonction Spawn vous permet de créer un nouveau thread.

    spawn(function() while true do print(1) wait(1) end end) tant que true do print(2) wait(2) end

    Ici, le code déclenchera les deux boucles while en même temps.

    Retard() Fonction

    La fonction Delay fonctionne de la même manière que Spawn, sauf qu'elle créera un délai avant de créer le thread.

    delay(5, function() tant que true do print(1) wait(1) end end) tant que true do print(2) wait(2) end

    Ici, le script lancera la deuxième boucle while, attendra 5 secondes puis lancera la première boucle while.

    Coroutines

    Les coroutines sont essentiellement des moyens de créer de nouveaux threads, uniquement avec plus de fonctions.

    local ctine = coroutine.create(function() while true do print(1) end end)

    Notez que le thread ne s'exécutera pas sans une fonction de reprise par la suite.

    coroutine.resume(ctine)

    Vous pouvez utiliser la fonction de rendement pour mettre en pause la coroutine.

    coroutine.yield(ctine) wait(1) coroutine.resume(ctine)

    Ici, le script mettra la coroutine en pause, puis la reprendra en 1 seconde.

    ajouter un commentaire de Tutoriel : Guide d'expert sur les scripts
    Commentaire envoyé avec succès ! Nous l'examinerons dans les prochaines heures.

    End of content

    No more pages to load