FANDOM


Maintenant que l'on a l'ébauche de la première scène de notre jeu, il est temps d'ajouter un menu pour quitter le jeu ou commencer une nouvelle partie.

Ce tutoriel vous apprendra notamment à créer des boutons, changer de scène et quitter le jeu. Ce sera aussi l'occasion de découvrir quelque concept intéressant pour la suite : les "ray" et les propriétés de script.

Un premier bouton Modifier

Commencez par créer une nouvelle scène pour notre menu principal et définissez-la comme scène de départ pour votre projet. Ajoutez-y une caméra et un objet avec un modèle de bouton. Faites un bouton "quitter" (un simple bloc plat avec un texte comme texture), ou récupérez-en un dans un projet existant.
Bouton Quit.jpg

Bouton Quit

Par exemple, celui du projet Doomsday Carrot Rampage :

Maintenant que l'on a notre bouton il faut qu'il soit utile '^^. Créez un nouveau script et associez-le à votre objet bouton.


La fonction Behavior:Update() , va se charger de vérifier en permanence si l'utilisateur clique sur le bouton, et dans ce cas quitter le jeu.


Pour vérifier si l'utilisateur clique gauche quelque part sur la fenêtre du jeu on utilise la condition suivante :

if CraftStudio.Input.WasButtonJustPressed("Fire") then
    ...
end

CraftStudio.Input.WasButtonJustPressed("Fire") veut dire "Le bouton "Fire" viens d'être pressé". La touche associée au bouton "Fire" peut être modifiée dans l'administration de votre projet.


La suite de notre code sera donc entre le if et le end. Il nous reste à déterminer si le curseur est sur le bouton au moment du clic. On peut connaitre la position du curseur avec : CraftStudio.Input.GetMousePosition()


Il nous faut maintenant savoir si ce point fait parti du bouton. La méthode la plus simple est de tracer une demi-droite virtuelle partant de la caméra et passant par celui-ci. Pour ce faire, crafstudio fournit un outil très utile : les ray (rayons).


La création d’un ray se fait à partir d’un composant caméra et prendra en paramètre la position de la souris. 


On commence par récupérer le composant de type "Camera" de notre scène, celui-ci ettant associé à un objet (ici nommé "camera") .

self.camera = CraftStudio.FindGameObject( "camera" ):GetComponent( "Camera" )

On peut créer notre ray à partir de ce composant:

local ray = self.camera:CreateRay( mousePos )

Dans la variable locale ray il y aura donc le rayon qui commence à la camera et qui passe par la position de la souris.

Pour finir il faut vérifier que le rayon passe par le modèle auquel le script est rattaché, nous allons donc réutiliser une condition.

if ray:IntersectsModelRenderer( self.modelRndr ) ~= nil then
    ...
end

ray:IntersectsModelRenderer( le modèle du bouton ) retourne la distance entre le point de départ du rayon et le point d'intersection entre « ray » et le modèle passé en paramètre. Donc la traduction de cette ligne est " Si la distance d'interception du bouton n'est pas nulle (si elle existe et donc que le bouton a été touché par le rayon) alors..."

On utilisera ici comme paramétre le composant "ModelRenderer" de l'objet auquel le script est rattaché ( grâce à self.). Ce sera donc notre bouton que l'on récupére par :

self.modelRndr = self.gameObject:GetComponent( "ModelRenderer" )

La dernière fonction utilisée est celle qui permet de quitter le jeu :

CraftStudio.Exit()

Là il n'y a pas beaucoup d'explication à donner '^^.

Pour clarifier les choses nous allons placer nos déclarations dans la fonction Behavior:Awake() :

function Behavior:Awake()
    self.modelRndr = self.gameObject:GetComponent( "ModelRenderer" )
    self.camera = CraftStudio.FindGameObject( "camera" ):GetComponent( "Camera" ) 
end


Et le traitement dans la fonction Behavior:Update() :

function Behavior:Update()    
   if CraftStudio.Input.WasButtonJustPressed("Fire") then
        local mousePos = CraftStudio.Input.GetMousePosition()
        local ray = self.camera:CreateRay( mousePos )
        local distance = ray:IntersectsModelRenderer( self.modelRndr )
        
        if distance ~= nil then
            CraftStudio.Exit()
        end
    end
end

Lancez, testez…

Faire plusieurs boutons Modifier

Créez maintenant un deuxième bouton « Jouer ». Celui-ci servira à lancer notre scène. Pour le gérer on pourrait y associer un nouveau script, en remplaçant :

CraftStudio.Exit()

Par :

CraftStudio.LoadScene (CraftStudio.FindAsset("nom de la scene de jeu")) 

Mais si nous avons beaucoup de boutons, il faudra recréer un nouveau script pour chaque bouton… Pour nous simplifier la vie nous allons plutôt utiliser un seul script pour tous nos boutons ! Nous allons utiliser une fonction assez peu utilisée car peu connue : les propriétés de script. Pour ce faire, ouvrer le script du premier bouton, et cochez la case "Afficher les propriétées" pour afficher la zone marron foncé entre le script et la liste des sauvegardes.

Nous allons avoir besoin d'une propriétée donc vous cliquez une fois sur le "+".  Une nouvelle ligne est apparue, dans la case "Nom" entrez le nom de votre variable. Moi je vais mettre "fonction" car c'est cette variable qui contiendra la fonction du bouton. Dans la case Type vous choisissez "Texte" et vous ne mettez rien dans la valeur par défaut.


Une fois cela fait, retournez sur votre scène et normalement en sélectionnant votre bouton, qui a le comportement scripté de votre script, il y a, juste en dessous du nom du script, une case avec fonction à côté. Cochez cette case et une autre case, de texte cette fois ci, est apparue. Dans cette case vous allez écrire ce que contiendra la variable fonction, je vous conseille donc de mettre un mot explicite (si c'est le bouton play écrivez play, pas ezfhyzvcyz '^^). Remplisser donc cette case pour votre bouton Quitter avec "quit", ajouter le meme script a votre nouveau bouton "jouer" et remplisser la case fonction avec "play". 

Une fois ceci fait, revenez sur votre script. Il faut maintenant vérifier ce que contient notre variable fonction et déclencher l'action correspondante en utilisant une structure conditionnel classique : If then ... elseif then ... end .

if self.fonction == "quit" then

end

Fonction est notre "variable du haut du script".

Self. veux dire que la variable est propre a l'objet de la scène ça permet de ne pas mélanger les différents boutons.

"quit" est le texte qui doit être contenu dans la variable pour que l'action s'effectue. (Les guillemets servent à désigner un texte)

Et maintenant nous pouvons utiliser la fonction :

CraftStudio.Exit()

Qui permet de quitter le jeu. Pour gérer l’autre bouton ajoutez à la place de "end" :

elseif self.fonction == "play" then
    CraftStudio.LoadScene (CraftStudio.FindAsset("jeu"))
end

Le script entier Modifier

Voici le script terminé. Il fonctionne pour deux boutons, mais vous pouvez bien sur en ajouter, ça ne devrait pas vous posez de problèmes si vous avez bien suivi le tutoriel.

function Behavior:Awake()
    self.camera = CraftStudio.FindGameObject( "camera" ):GetComponent( "Camera" )
    self.modelRndr = self.gameObject:GetComponent( "ModelRenderer" )
end


function Behavior:Update()
    if CraftStudio.Input.WasButtonJustPressed("clicgauche") then
        local mousePos = CraftStudio.Input.GetMousePosition()
        local ray = self.camera:CreateRay( mousePos )
        local distance = ray:IntersectsModelRenderer( self.modelRndr )

        if distance ~= nil then

            if self.fonction == "quit" then
                CraftStudio.Exit()

            elseif self.fonction == "play" then
                CraftStudio.LoadScene (CraftStudio.FindAsset("jeu"))
            end
        end
    end    
end


(Tuto inspiré de ceux de Wardow )

Interférence d'un bloqueur de publicité détectée !


Wikia est un site gratuit qui compte sur les revenus de la publicité. L'expérience des lecteurs utilisant des bloqueurs de publicité est différente

Wikia n'est pas accessible si vous avez fait d'autres modifications. Supprimez les règles personnalisées de votre bloqueur de publicité, et la page se chargera comme prévu.

Sur le réseau FANDOM

Wiki au hasard