Guide d'animation

Introduction

  • La programmation

Conception

  • Code de modulation de paramètre : couleur

  • Code de collision avec un objet : obstacle

Temps supplémentaire

  • Code de points de sauvegarde

Introduction

Lors de la dernière séance, les jeunes ont modélisé des obstacles à partir de blocs mobiles disponibles sur Roblox Studio. Cette séance vise à ajouter des obstacles en attribuant des codes à des blocs de leur parcours. Les codes correspondent à des instructions particulières attribuées à des blocs choisis. Ces codes dicteront à ces blocs quoi faire lorsque le ou la joueur·euse va interagir avec eux. Il existe beaucoup de codes différents, mais nous en verrons deux à trois principaux dans cette séance.

La programmation

La programmation permet à vos pièces de prendre vie. Cela leur permet de répondre à la façon dont vous voulez qu'elles se comportent!

Dans l'univers des jeux vidéos, les codes sont cruciaux et sont présents partout, même si vous ne les voyez pas.

Les jeux sont programmés à partir de différents codes qu’on ne voit pas, mais qui nous permettent d’agir dans le jeu. Dans Among Us (schéma 1), les codes sont utilisés par exemple pour attribuer les rôles, comme les imposteur·rice·s qui correspondent aux ennemi·e·s de la partie.

Dans Mario, ils sont là pour signaler qu’on a gagné et qu’on peut passer au prochain niveau lorsqu'on touche le drapeau (schéma 2), ou pour sauvegarder le jeu à un certain endroit (checkpoint) (schéma 3).

La programmation dans Roblox Studio

Langage

Roblox utilise un langage qui s’appelle Lua. On verra plus en détail la logique de cette langue lorsqu’on l’appliquera avec un objectif concret, comme pour la création d’un obstacle par exemple!

Notion parent-enfant pour les objets

Roblox, comme bien d’autres plateformes de ce type, utilise la notion d’objet parent-enfant (parent-child) comme on peut bien le voir dans l’explorateur (schéma 4). Par exemple, le spawnpoint contient une décalcomanie. La décalcomanie est l’enfant du bloc spawnpoint, qui est son parent.

Ajouter du code à des objets

Cette notion est importante, parce qu’on veut mettre le code (enfant) dans le bon contenant (parent). Pour ajouter du code à un objet, on n’a qu’à glisser la souris sur le bloc qui sera notre prochain point de sauvegarde dans l’explorateur et cliquer sur le bouton « plus » qui apparaît. Ensuite on sélectionne « script », qui est une autre façon de dire « code ».

Roblox va identifier automatiquement l'objet au sein de la liste de l'explorateur lorsque vous cliquez sur un bloc dans votre jeu.

Conception

La programmation nous permet de créer des objets qui ont un comportement dynamique. Pour avoir un effet, il faut avoir une cause.

Les causes/variables possibles :

  • Une action causée par le·la joueur·euse (on a touché un objet)

  • Un événement (un autre objet est rentré en contact avec l’objet)

  • un facteur indépendant (le temps)

Modulation d'un paramètre : bloc qui change de couleur

Défi 1 : Appliquer le script de changement de couleurs à un bloc et jouer avec le paramètre "speed".

Il est possible d'ajouter un script avec un facteur de temps pour qu'il réponde à une fonction de changement de couleur automatique. Le bloc passera d'une couleur à l'autre à une vitesse qu'on lui attribuera.

Copier et coller le code ci-dessous à un bloc choisi dans votre jeu et passez en mode test pour confirmer que le code a bien fonctionné.

local Brick = script.Parent -- Put the part you are changing
local speed = 1 -- The speed that the colors change
while true do
    for i = 0,1,0.001*speed do
        Brick.Color = Color3.fromHSV(i,1,1)
        wait()
    end
end

Si on interprète ce script afin de mieux le comprendre, on pourrait le lire de cette manière :

Variable brique Variable vitesse Pendant que le jeu est actif, fais:

Un cycle qui augmente selon la vitesse

Change la couleur de la brique

attends() fin fin

Ca fait encore peu de sens si vous n'avez jamais vu la notion de code. Il est seulement important de comprendre qu'en attribuant ce script à un objet, celui-ci agira dans le sens du code. Dans ce cas-ci, le bloc choisi qui est codé changera de couleur à la vitesse qu'on lui donne.

Qu’arrive-t-il lorsqu’on augmente ou diminue cette variable ? Au lieu de mettre 1 à la deuxième ligne du script, augmentez le chiffre et observez comment l'objet réagit.

Code de collision avec un objet : obstacle

Défi 3 : Créez cet obstacle interactif en modélisant les blocs nécessaires et en y ajoutant le code !

Le prochain script permet de créer un obstacle. En appliquant un script de collision à nos blocs, la personne qui joue perdra sa vie simplement en touchant à ces blocs codés.

Le deuxième obstacle de notre obby sera interactif en utilisant la programmation au lieu des contraintes physiques comme au dernier atelier.

script.Parent.Touched:Connect(function(hit)
    if hit.Parent:FindFirstChild(‘Humanoid’) then
        hit.Parent:BreakJoints()
    end
end)

Si on interprète ce script afin de mieux le comprendre, on pourrait le lire de cette manière :

Vérifie si il y a eu des collisions Si l’objet frappé est humanoïde, alors Brise les articulations de celui-ci()

fin

fin)

Encore une fois, cette interprétation semble étrange, mais le script est simplement une manière de dicter aux blocs qu'ils sont des obstacles. Si le·la joueur·euse touche ces obstacles iel recommencera au dernier point de sauvegarde.

De la majuscule à l'espace en trop, le langage du code est très sensible aux erreurs. Si ca ne fonctionne pas, vérifiez bien qu'une erreur ne s'est pas glissé dans le Script lorsque le copier-coller a été fait.

Temps supplémentaire

Défi 3 : créer des points de sauvegardes dans notre jeu. Il peut être avant un obstacle, ou à chaque coin tournant du parcours.

Le point de sauvegarde évite au·à la joueur·euse de recommencer du début lorsqu'iel a été tué par un obstacle. En passant sur le point de sauvegarde programmé, Roblox se souviendra de vous faire recommencer à celui-ci.

local spawn = script.Parent
spawn.Touched:connect(function(hit)
    if hit and hit.Parent and hit.Parent:FindFirstChild("Humanoid") then
        local player = game.Players:GetPlayerFromCharacter(hit.Parent)
        local checkpointData = game.ServerStorage:FindFirstChild("CheckpointData")
        if not checkpointData then
            checkpointData = Instance.new("Model", game.ServerStorage)
            checkpointData.Name = "CheckpointData"
        end
        
        local checkpoint = checkpointData:FindFirstChild(tostring(player.userId))
        if not checkpoint then
            checkpoint = Instance.new("ObjectValue", checkpointData)
            checkpoint.Name = tostring(player.userId)
            
            player.CharacterAdded:connect(function(character)
                wait()
                character:WaitForChild("HumanoidRootPart").CFrame = game.ServerStorage.CheckpointData[tostring(player.userId)].Value.CFrame + Vector3.new(0, 4, 0)
            end)
        end
        
        checkpoint.Value = spawn
    end
end)

Les points de sauvegarde sont également disponibles dans le Toolbox. Cherchez simplement "checkpoint" et ajoutez-le dans votre parcours.

Last updated