Mon profil

J'aime le skate la 3d et le bon son !!

Tuto Billard



 
 









Dans ce tutoriel nous allons apprendre à faire un jeu de billard grâce au moteur de blender, seulement à l'aide des logic brick ! Par contre, ayant un mac assez vieux j'utilise la version 2.49 de blender, il faudra utilisé la même, mais si vous utilisez des versions plus récentes il y a quand même des choses a apprendre de ce tuto, mais mieux vaut déjà connaitre le logiciel... Bon tuto !


Commençons dans le vif du sujet, faites une nouvelle scène supprimez le carré de base, puis créez soit une ICOsphère soit une Uvsphère, à vous de voir!
Espace/Add/Mesh/UVsphère ou ICOsphère.

J'ai opté pour une ICOsphère que j'ai ensuite lissée. Passez en mode édition, sélectionnez l'objet puis tabulation, en mode édition appuyez sur A pour sélectionner tous les cotés si ce n'est déjà fait, puis appuyez sur W pour lui appliquer un SetSmooth.


Faite de même si vous avez choisi une UVsphère. ;)

Vous pouvez également accéder à set solid et set smooth dans le panneau tout à gauche de editing F9.


J'ai colorié ma boule en rouge car je compte faire un billard Anglais qui compte sept billes rouges, sept billes jaunes, une blanche et une noir. Pour ce faire dupliquez cette boule quatre fois shift D et appliquez à chaque bille une couleur différente, puis dupliquez les boules rouges et jaunes six fois. :-°

Pour chaque objet que vous créez, placez les sur un autre calque que vos autres objets ou un peu plus loin dans la scène afin d'éviter la surcharge d'information et qui pourrait provoquer des ralentissements ! ;)


Pour la queue c'est très simple, commencez par créer un cylindre Espace -> Add -> Mesh -> Cylinder puis rapetissez le jusqu'à obtenir un cylindre aussi large que votre boule en utilisant la commande S.

Allongez votre cylindre avec S puis Z, pour qu'il grandisse seulement sur l'axe des Z. Si votre cylindre est allongé d'une autre façon, utilisé S puis X ou Y au besoin. :D

Pour allonger sur deux axes en même temps, utilisez S puis Shift + axe, cela éliminera l'axe avec lequel vous avez combiner Shift, et les la mise à l'échelle ce fera sur les deux axes restant ! Exemple S  puis Shift + X supprimera l'axe x de votre mise à l'échelle.

Passez en mode édition, et sélectionnez les arrêtes du haut grâce au bouton B, ou deux fois B pour sélectionnez en encadrant. Un fois la sélection faite relâchez le bouton de la souris.
Puis utilisez S jusqu'à ce que le bout de votre queue soit plus petit qu'une boule.





Lorsque vous utilisez le sélectionneur avec B, n'oubliez pas de vous placez correctement face à l'objet, utilisez sur le pavé numérique 1, 3, 7 pour choisir une vue aligné sur X, Y ou Z, la touche 5 pour passez de la vue orthographique à la vue en perspective et 0 pour voir de la première caméra que vous avez créée. 
Un autre outil est pratique lorsque vous sélectionnez des points avec B. Il se situe, en mode édition, à droite du type de sélection par vertex, arrête, ou face et est symbolisé par un carré : Occlude background geometry, il ne permettra de sélectionner que les points faces à vous ce qui évite de sélectionnez des points se situant l'arrière de votre objets. o_O

L'Occlude background geometry n'est disponible qu'en mode de vue 
solideshader, ou texturé !

Il ne nous reste plus qu'à ajoutez une couleur à notre nouvelle queue. :p


Pour faire une table il faudra: un plateau et des trous.
Et nous allons commencer par ... les trous. ^^
En effet ces trous nous permettrons de définir les dimensions de notre table, ce sera plus pratique vous verrez. ;)

Tout d'abord sélectionnez une boule ou créez une ICOsphère un tout petit peu plus grande que vos autre boules, ensuite créez un cube de la même taille que votre ICOsphère.

Si vous aviez fait des UVsphère pour vos boules il vous faudra créer une ICOsphère

Vous pouvez changer le mode d'affichage (fil de fer) grâce à la touche Z. :)

Placez ensuite la boule dans le coin du cube, agrandissez le afin que la sphère prenne
tout le coin mais laissez les deux points adjacents en dehors de la sphère.


Étirez ensuite votre sphère comme tout à l'heure avec la queue, S suivi de Z, pour qu'elle dépasse un peu de votre carré.


Pour créer un trou dans le cube nous allons utiliser une opération booléenne, il y en a trois ; intersection, union, différence, ici nous allons utilisez différence.
Sélectionnez d'abord le cube, appuyer sur Shift puis la sphère tout en restant appuyer sur Shift.
En mode objet faites W/Différence.

Pour que votre sélection soit correct il faut qu'un des deux objets de l'opération soit en violet foncé l'objet qui subira pour une différence, l'autre en violet clair trouera dans le cas d'une différence, si les objets sont de même couleur c'est que vous sélectionnez un objet de trop ou que vous vous en aviez sélectionnez un sans dé-sélectionnez les deux autres. Bref pour être sur de son opération mieux vos dé-sélectionnez le tout grâce à A puis ne touchez qu'aux deux pièces utiles à l'opération.

Déplacer ensuite votre sphère et votre cube pour voir le résultat ! :o


Si il reste des coins du cube, effacez les au moyens de la touche B et de l'occlude background geometry, souvenez vous ! Il vous permettra de choisir seulement les points face à vous! Ou vous pouvez recommencez votre figure. ;)

Recommencez cette opération, je sais je vous en demande beaucoup ^^ , mais cette fois en trouant bien au milieu !


Nous avons nos trous !

Gardez la boule qui vous a servie à trouer nous la réutiliserons tout à l'heure. :o

Il nous faut maintenant le plateau que nous allons trouer par la même occasion. Placez vous en vue du dessus, pavé numérique 7 , et créez un plan, puis étirez le pour en faire un rectangle. Coloriez le de la couleur que vous voulez, car c'est notre tapis ! ^^
Surtout n'oubliez pas d'être en vue du dessus pour que notre tapis soit bien plat, ou autrement toutes les billes iront d'un coté du billard.


Une fois que la surface "plane" est créée, sélectionnez une bordure, puis extrudez la avec la touche E, bougez la souris tout en appuyant sur contrôle afin que votre extrusion soit perpendiculaire à la table. Extrudez la deux fois de la même longueur car allons « cassé » la bande.

Dans mon image j'avais déjà fais les trous dans la table mais commencez par les bandes c'est plus simple. ;)


Placez une boule qui colle votre bande et votre tapis comme si elle tapait dedans.

Passez en mode édition, sélectionnez l'arête du milieu de la bande, et servez vous de la boule afin de faire une bande qui soit en forme de vague autour de la boule :



Et continuer pour chaque bande. :-°



Sur ces images la boule est un peu plus petite que la bande, vous pouvez la faire un peu plus grande ! Comme dans un vrai billard. :p


Utilisez ensuite la boule qui vous à servi tout à l'heure pour la création des coins, afin de trouer le tapis dans chaque coins, grâce à l'opération W/Difference. ;)

Pour faire une différence n'oubliez pas de tout dé-sélectionnez avec A pour évitez les confusions, et que, l'objet percé est violet foncé, premier sélectionné, l'objet violet clair, deuxième sélectionné, est l'objet qui perce. ;)

Je vous conseil d'appliquer la même couleur à votre boule que votre tapis pour le trouer car le trou sera fais grâce à la boule. Le trou plutôt un creux d'ailleurs, sera donc de la couleur de la boule.

Voici le résultat après plusieurs Différence ci dessous, on ne voit pas les bandes car sur cet exemple je les avait fais après mais le résultat est meilleur lorsque que l'on commence par les bandes ! :p




Si vous aviez déjà une lampe placez la au dessus du billard, sinon faites add->Lamp->Lamp et passez en mode Shaded pour voir si l'éclairage vous convient. Pour augmenter ou diminuer l'énergie de la lampe allez dans le panneau shading F5, vous pouvez aussi changez la couleur de la lampe. Vous verrez qu'à droite du panneau vous pouvez changer le type de lampe directement ! Mais si vous ne savez pas quelle est la meilleur laissez diffuse ou sun elles éclairent la scène entièrement. ;)

Nous avons enfin notre table. :')


Si vous êtes en mode texturé vous verrez qu'en ce mettant à l'arrière de d'une bande celle ci est invisible, placez vous en dessous vous verrez qu'il n'y a même plus de tapis, cela vient du fait que les plans, même étirés :p, ne sont texturés que sur une seul face, l'autre reste transparente! Intéressant n'est ce pas ? Et cela va nous servir dans notre jeu, en effet lorsque le joueur voudra placez sa queue, il pourra directement voir a travers la bande mais celle d'en face sera intact ! Ce sera donc très pratique. ^^

Il ne nous reste plus qu'a créer les différentes logic brick du système de jeu, l'animation de la queue ainsi que les caméras !

Allez ! On a fais le plus dur !


Dans cette partie je vais vous montrer comment placer les différents objets et indiquer leur rôle dans le jeu. :)

Nous allons devoir placer notre queue selon la boule blanche, pour cela rien de plus simple qu'une contrainte!

Sélectionnez votre queue et allez dans Logic, F4, ajoutez lui un Sensor Always, cela veut dire que la condition du sensor (capteur) est toujours vraie, un controller pour faire la liaison avec l'actuator, mais comme il n'y a qu'un actuator et qu'un sensor, le controller peut être du type que vous voulez où laissez le par défaut and, et un actuator de type Edit Object, cliquez sur Add object qui est la valeur par défaut de cette actuator, choisissez track to, mettez le nom de votre boule blanche dans mon cas BilleBlanche , l'idéal est de donné un vrai nom à vos objets(Queue, tapis, boule jaune etc...), pour cela allez dans le panneau Editing (F9) et changez le nom dans le chanps où il y a marqué OB pour objectME change le nom du bloc de données mais n'est pas important pour les briques n'y touchez pas, bref.


Surtout ne cochez pas 3d dans la brick track to, cela permet de suivre la bille sur 3 axes, mais cela risque de compliquer les choses, nous allons donc utiliser une autre technique pour s'orienter sur l'axe Z. Et n'oubliez pas de relier les différentes briques entre elle, le sensor au controller, puis le controller à l'actuator, ou vos actions ne seront pas pris en compte. ;)
Pour supprimer un lien, placez votre souris au dessus et appuyer sur SUPPR.

Ensuite il va falloir que notre queue soit orienté sur l'axe Y local (l'axe vert, voir ci-dessous), car Track to va diriger notre queue grâce à l'axe Y de l'objet, donc si votre queue est placé dans l'allongement X ou Z, la queue risque de viser dans la lune! :p

Je précise que le l'axe global sert juste à se repérer dans le monde et local est l'axe de l'objet. Il existe aussi l'axe normal qui se place à la perpendiculaire, ou normal de vos faces arrêtes et points, ainsi que View, qui lui, se place perpendiculairement à votre point de vue.
Je vais vous proposer deux solutions, lisez les deux avant de faire quoi que ce soit :
Vous pouvez donc changez l'axe visible, il se situe a droite des calques. Une fois que vous avez choisis local, passez mode édition puis faite A pour sélectionnez votre queue en entier et faites la tourner en vous aidant des vues de face, de coté et du dessus pour quel soit dans l'allongement de l'axe Y local comme dans l'image ci dessous.

Si elle est déjà placé correctement, félicitations vous n'avez plus rien à faire !


Vérifiez que votre point de pivot, le petit point rose est bien resté au centre de votre queue lorsque vous avez modifié l'axe local !




 






















/!\ Si vous avez du mal a garder votre queue perpendiculaire en la tournant utilisez Ctrl en même temps que vous tournez avec la souris, vous pourrez effectué des rotations de 90° ou 45° en quelques mouvements, sans cette astuce vous pourrez faire plus de rotation différentes, mais l'objet ne sera qu'avec de la chance aligné à un axe.



Autrement vous pouvez utiliser Shift  pour faire une rotation précise, qui tourne beaucoup moins vite. Même touche pour la translation et la mise à l'échelle.

/!\ Si vous avez lu cette avertissement trop tard alors utilisez Alt+G ou R ou S si vous voulez réinitialisé votre objet dans la rotation translation ou mise à l'échelle.

Voici la deuxième solution :

Regardez votre axe local, votre queue est aligné sur un axe si vous l'avez construite a partir d'un cylindre, il faut alors choisir le bon axe sur lequel elle se dirige.



Track,X,Y,Z correspond à l'axe avec lequel la queue pointe l'objet tracker,et Up X,Y,Z, ne serviront pas ici...


Faites P dans la vue 3D pour lancer le jeu, et voir si la queue s'oriente correctement vers votre boule, comme si elle allait taper dedans. ;)


Ensuite pour notre jeu il va nous falloir une caméra, logique. :-°
Faites Add/Camera
Puis placez de façon à ce qu'on voit la queue en entier comme si on la tenait devant nous:
 



Appuyez sur la touche 0 du pavé numérique pour voir de la caméra, et si vous aviez une autre caméra sélectionnez celle depuis laquelle vous voulez voir avec Ctrl + 0, cela va assigner la touche 0 à l'objet que vous avez sélectionnez, et votre vue sera alignez sur son axe Z local, et sur son point de pivot donc. Si vous assignez un 0 à un cube par exemple, vous n'allez pas voir grand chose, agrandissez donc l'objet avec S pour voir à l'intérieur. :D



Allez ensuite dans les game logic de votre camera, ajoutez un sensor Always, un controller And, et un Actuator de type parent, et à gauche de set parent, mettez le nom de la queue, dans mon cas Cylinder.



La caméra va donc suivre la queue dans ses moindres mouvements (seulement dans le jeu). ;)

Ajoutez une deuxième caméra qui permettra de passer de la vue 1 ère personne à une vue du dessus, comme ceci:

Allez dans le panneau édition raccourci F9, et cochez orthographic, la valeur au dessus changera car c'est la valeur exact pour une perspective orthographique, qui ne subie aucune déformation de profondeur, elle conserve la géométrie un peu comme en perspective isométrique. :o
N'hésitez pas à faire des recherches là-dessus ! ^^


Nous allons maintenant faire un interrupteur pour passer de cette caméra à l'autre comme on le voudra. :)

Ajoutez un sensor de type keyboard cette fois, cliquez à droite de key sur la case vide, et appuyez sur la touche de votre choix, activez Tap, cette fonctionnalité n'activera qu'une seul fois la touche, vous serez obligez de relâcher la touche puis ré-appuyer pour renvoyer un second signal, vous allez comprendre après. :p

Ajoutez également deux controllers And et deux actuators scene de type Set camera, inscrivez les noms de chaque caméra dans les deux actuators.



Nous allons maintenant assigner une propriété (par défaut de type Float changez la en int car nous aurons besoin d'un chiffre rond ) à la caméra que l'on appellera camera, original. :p

Pour ça cliquez sur Add property dans les game logic à gauche. ;)
Laissez la valeur par défaut, c'est à dire 0.

Cette propriété va nous permettre de changer de caméra, afin de rendre l'autre inactive grâce à une incrémentation ( c'est à dire qu'on ajoute +1 à la propriétée ) et une mise à zéro, qui rend à la propriété sa valeur d'origine.

Comme nous avions coché tap pour le Sensor Keyboard la propriété changera lorsqu'on aura ré-appuyer sur la touche.

Pour monter ou descendre vos briques, il faut que cette brique soit fermée grâce à la flèche (comme les deux Actuator Scene ci-dessus), ensuite cliquez sur la brique, puis choisissez entre "MOVE UP" ou "MOVE DOWN" afin de mieux vous repérer dans vos multitudes de briques.^^


Maintenant nous allons avoir besoin de contrôler la queue afin de se placer comme on le voudra.

Ajoutez lui un sensor de type keyboard, cliquez à droite de key sur la case vide, et appuyez sur la touche fléchée bas, puis ajoutez un controller par défaut and, et un actuator par défaut motion, allez dans Loc et mettez dans le troisième champs, qui représente Z ; -0,05, ainsi notre queue va descendre de 0,05 unité par rapport au quadrillage sur l'axe Z, lorsque l'on presse Bas.

Le L à droite des trois champs signifie Local, laissez le coché afin que votre queue soit alignée sur son propre axe et non pas celui du monde !
 


Vous pouvez aussi nommer vos différents briques, n'hésitez pas a leur donnez un nom pour vous rappeler à quoi correspond chaque brique.

Recommencez ensuite pour haut mais au lieu de de la touche Bas dans le sensor utilisé la touche haut, et dans motion mettez 0,05 au lieu de -0,05.


Continuez ensuite pour la gauche et la droite ce sont les champs tout à gauche, il permette de faire bouger la queue sur l'axe X tout en subissant le tracking de la boule blanche qui ne fonctionnait pas sur l'axe des Z car, nous n'avons pas coché le bouton 3d !


J'ai mis une valeur un peu supérieur car je considère qu'il est plus pratique de se déplacer plus vite sur cette axe, afin que le jeu est un bon rythme, mais à vous de voir. :p

Ensuite recommencez pour avancer et reculer; attention la valeur qui servira à avancer sert également à frapper la balle il faut donc bien gérer cette vitesse, mettez la même que j'ai mis pour gauche et droite !
 


Ensuite il faut gérer les touches car à part les 4 touches directionnelles il n'y a pas d'autres touches pour se déplacer, j'ai donc utiliser espace pour reculer, et le shift gauche pour avancer et donc tirer, mais vous pouvez utilisez "ZQSD" par exemple pour vous déplacer, toutes les touches sont utilisables ! :D

Maintenant que le joueur peut décider de ses actions, passons à la physique. :D


Sélectionnez la boule blanche, cliquez sur l'onglet Logic (F4), cliquez sur Static choisissez rigid body. Laissez les réglages par défaut, actor se coche automatiquement ne vous en occupez pas.

Comme pour la caméra, ajoutez une propriété du nom de "Blanche" pour la bille blanche,"Rouge" pour la bille rouge, "jaune" pour la bille jaune, "noir" pour la noir. N'oubliez pas que toutes les billes doivent être des rigid body. :p

Si vous aviez faits des ICOsphère pour les billes, cliquez sur Bounds et choisissez Sphere dans la liste déroulante. Cela va former une sphère de collision autour de la boule.



Lancez le jeu, comme vous le constatez, les billes rebondissent mal sur les parois. Cela vient du fais qu'il manque du rebond mais, nous n'allons pas touché au propriété des rigid body, il faut modifier les shader directement afin de le rendre plus... rebondissant. :D

Ce menu n'est pas très pratique ceci dit, en effet les shader doivent servir aux ombres normalement,  ici elle servent également pour les coté physique, je n'ai aucune explication, peut être les versions plus récentes ont remédier à ce problème  !

Allez dans le menu shading et regardez à gauche, de RGB et HSV qui servent à modifier la quantité de chaque couleur dans la couleur final, il y a un bouton DYN pour dynamique. Cochez le, et la vous avez plusieurs options qui apparaissent. Laissez la friction à 0.50 mais augmentez la restitution à 0.3, cela va permettre à la bille de rebondir. Appliquez les mêmes paramètres de restitution à chacune des couleurs de vos billes.

Faites de même pour le tapis, car si l'on veut que les billes rebondissent sur le tapis, il faut que celui ci est un coefficient de restitution, mettez entre 0.5 et 1.



Ce sont des réglages approximatif mais qui marche plutôt bien pour moi, donc rien ne vous empêche de les personnaliser. Le fais qu'on rende nos billes dynamiques empêche au rigid body de bien se comporter, comme vous voyez la bille tourne sur elle même car elle est entre le dynamique et le rigid body, elle hérite donc des propriété des deux. C'est le seul moyen qu'il y a pour faire des rebonds réaliste, mais si vous connaissez des scripts, ou même un assemblage des brique qui permettent un meilleur effet, n'hésitez pas à le poster ! :P

Pour éviter des bugs, comme rentrer dans la bille blanche avec la queue lorsque vous tapez, sélectionner la queue et ajoutez un sensor de type collision, puis reliez le au controller relié à votre actuator avancer, comme sur l'image si dessous.

Mettez blanche dans property, cliquez sur Inv(inverser).



Maintenant le sensor envoie un signal positif au controller And tant qu'il n'a pas eu de collision avec la bille, quand il y a collision il envoie un signal négatif.

Si vous avez eu du mal a comprendre a quoi servait le controller et l'utilisation de deux signaux dans le même controller, lisez ceci:

Un controller c'est comme une opération mathématique. Le signal d'un sensor peut être positif (activé) ou nul (désactivé).
Si le controller est de type AND il multiplie le signal du sensor par un autre, dans notre cas:
Il va multiplier un signal positif égal à 1, lorsque l'utilisateur appuiera sur la touche shift, par un signal positif lui aussi égal à 1, tant qu'il n'y a pas de collision avec la bille, car il est inversé(normalement il enverrait 0 car il ne détecte aucune collision). Ce sont donc nos deux actuators qui envoient ces signaux, aux même controller.

Dès qu'il y aura la collision le controller va multiplier 1 (pour le signal de la touche SHIFT), par 0(pour la collision). 1*0=0 :p 
Le signal pour "avancer" sera donc nul. Il n'activera pas l'actuator.

Autrement dit, tant que la queue ne tape pas la blanche elle peut avancer, dès qu'elle tape dedans elle s'arrête car les deux conditions : appuyer sur shift, et que la queue n'entre pas en collision avec la blanche, ne seront plus vrai.
Si vous ouvrez la liste déroulante vous verrez le NAND, qui inversera le signal de sortie, vers l'actuator donc.

Il y a aussi le controller Or qui équivaut à une addition, si au moins un des deux signaux est positif alors le résultat sera positif.

Le XOR, qui signifie OU exclusif, c'est à dire qu'il n'enverra le signal positif que si celui ci est une addition entre plusieurs signaux ayant différente valeur (1 et 0 et 1 par exemple) si tous les signaux sont les mêmes(1 et 1 et 1 par exemple) alors il renverra de toute façon 0. Peut importe l'issu de l'opération, tant qu'elle contient des termes de différentes valeurs, le résultat sera positif.

Il en existe encore d'autres : 

Tous ces opérateurs, ont un nom ce sont des opérateurs logiques, ou booléens. Comme les opérations booléennes qui vont ont servi, mais celle ci n'étais qu'un moyen de percer nos objets, les opérateurs servent d'ordinaire dans la programmation, par exemple celle des game logic ! ^^

En électronique on appelle ça les portes logiques si vous voulez des renseignements sur la façon de calculer, faites des recherches sur l'algèbre de Boole et le calcul binaire.

Rassurez vous n'êtes pas obligés de connaître tous les opérateurs pour faire un bon jeu dans Blender ! Mais le minimum est de comprendre que le AND, qui veut dire Et en français pour les newbie ^^, multiplie les signaux entre eux, ce qui veut dire qu'il faut que tout les signaux soit positif pour avoir un signal de sortie positif,et dans le NAND (Controller AND en inverse) alors il faut que tout les signaux soit négatif pour avoir une sortie positif. 
Le OR, n'est pas important ici mais c'est important de le connaitre si on veut se perfectionner dans le Game Blender ;). Le Ou, additionne deux signaux, c'est à dire que pour le Controller OR tant qu'il y a au moins un signal positif entrant dans l'opération, le signal de sortie est à 1, et attention dans le NOR il faut au moins 1 signal négatif ;)

D'ailleurs voici une petite video qui parle d'informatique et de système binaire, si vous êtes complètement débutant dans le calcul binaire, ou si vous voulez en savoir plus sur l'histoire de l'informatique !
https://www.youtube.com/watch?annotation_id=annotation_390818&feature=iv&src_vid=qMOkFjRrPP8&v=VOMsm0nBIeU



Nous allons commencer par ajouter des détecteurs qui seront capables de détecter la boule blanche lorsque la queue est en face, ce sera quand même plus pratique. ^^

Ajoutez à la queue deux sensor de type Ray (rayon en français),reliez les à un controller chacun And. 


Dans le champ property, mettez le nom de la propriété de la boule blanche, normalement blanche. Le bouton X permet au rayon de détection de traverser les objets, cochez le car nous aurons besoin de voir à travers les coté du billards.
Range donne la distance maximal du rayon, j'ai mis une valeur assez élevé, l'unité de mesure est le carreau du quadrillage.
Inv comme je vous l'avez expliqué ultérieurement signifie inverser, et change le signal de sortie positif en négatif et inversement. Nous avons ainsi un capteur qui nous indique que la bille blanche est en face de la queue et l'autre, qui nous indique qu'elle ne l'est pas. :D
Enfin dans le menu déroulant choisissez la direction du rayon, ici +Y axis car l'axe Y est l'axe sur lequel la queue est aligné et + car le rayon va vers l'avant de la queue.

Comme vous le voyez les deux controllers ne sont relié à rien ! :P En fait nous allons les reliés a un autre objet du jeu, qui sera la visée !
Pour crée une visé, elle sera un peu primitive mais très utile. ;)

Commencer par créer un plan, vue de la caméra, afin que celui ci soit en face à la vue du joueur. lorsque vous créez un plan depuis une vue définie (auquel on accède avec la pavé numérique) la plan apparait en face. Ici le plan définie est la caméra!


Inclinez le un peu pour qu'il soit en face de la caméra.






Vérifiez que la face transparente du plan soit du coté du jeu et nom de la caméra ! Pour le voir n'oubliez pas de vérifiez quel le mode d'affichage est bien en texture ! :o



Ensuite allez dans le menu logic et ajoutez les briques suivantes, afin de rendre votre plan enfant à la caméra.



Sélectionnez votre queue et le plan en même temps, en cliquant sur un objet puis en faisant shift+clique sur l'autre. Ainsi en ayant sélectionnée le plan et la queue, vous avez accès à deux systèmes de brique logique en un !

Ajoutez deux actuator de type visibility au plan. Puis relié chacun d'entre eux aux deux controllers inutilisés de la queue.
 





L'un doit être coché visible et relié au détecteur Ray qui n'est pas inversé, ce qui rendra visible le plan lorsque la queue ne sera face à la bille blanche. Tandis que l'autre ne doit pas être coché et est relié au détecteur Ray inversé, ce qui rendra invisible le plan lorsque la queue ne sera pas face à la bille blanche.


Nous allons maintenant plaqué une texture sur ce plan !


L'UV-Mapping n'agit pas sur les ultra-violet comme son nom l'indique, ^^ mais à plaquer une texture 2d sur un objet 3d. U et V sont les 2 axes de la texture alors que X, Y et Z ceux de la scène 3d.
Il existe un tas de façon d'utiliser l'UV-mapping, notamment pour les personnages low-poly (peu de polygone), il suffit de récupérer la forme de chaque face où l'on veut y appliquer une texture et plaquer sa texture sur ce modèle ou partir d'un modèle de texture et organiser son modèle dessus après ça dépends de chacun.

Mais nous n'allons rien faire d'aussi compliqué, nous allons nous contenter d'appliquer une texture sur notre plan.

Pour signaler que la boule est face à la queue j'ai utilisé un simple OK avec un fond transparent. 

Pour avoir un fond transparent, utilisé votre logiciel de dessin préféré, effacez le fond et ajoutez votre dessin par dessus, puis enregistrez en .tif et si vous cochez l'option 
Layers qui veut dire calque votre image sera plus volumineuse mais elle conservera les différents calques, ces calques seront ensuite modifiable à nouveau ! :-°
Seul le tif ou le psd conserve les différents calques, mais vous n'avez justement pas besoin de ces calques, si vous enregistrez au format jpg, png, ou tif sans cochez "calques" cela supprimera les calques et conservera la transparence en réduisant la taille du fichier ! :D
Ensuite sélectionnez votre plan, allez dans le panneau material (F9) puis passez en mode édition dans la vue 3d, Tab, pour que les options suivantes apparaissent.



Ajoutez donc une UV-texture afin que notre image soit applicable, cliquez sur New dans l'onglet Mesh.
Dans l'onglet Texture/active face alpha blending, cochez Alpha pour que l'image gère la transparence.

Le bouton Add, permet d'ajouter la couleur de la face, de ce qu'il y derrière si elle n'est pas déjà texturé, à la texture qu'on lui applique.

Ensuite ajoutez un plan de travaille en cliquant droit sur le bord d'un des modules, lorsqu'il y a un poing qui apparait à la place de votre souris. Cliquez ensuite sur Split area, puis cliquez à l'endroit où vous voulez couper le plan en deux.


Pour coupez votre plan Horizontalement, allez sur les coté de la fenêtre, pour le coupez verticalement choisissez les lignes transversales. ;)
Pour agrandir un plan de travail cliquez sur la barre qui sépare deux plans, sélectionnez Join area, et cliquez sur la fenêtre à supprimer, afin d'agrandir l'autre.

Vous pouvez sauvegardez vos modèles de plan de travail grâce à ceux menu en cliquant sur AddNew puis duplicate.


Dans le nouveau plan, cliquez sur le sélectionneur de module, et choisissez UV/Image editor.

Dans la vue 3d, sélectionnez le plan et passez en mode édition normalement un carré jaune viens d'apparaître dans l'éditeur d'image, c'est notre plan décomposé dans ces différentes faces à savoir ... un carré ! :-°
Ensuite chargez votre image !


Voilà ce que vous devriez obtenir "In game" :P


Pour éviter que notre message, OK ne soit assombrit par l'absence de lumière ou trop éclairer par celle ci, cochez le bouton Shadeless dans le menu material (F5) qui empêchera à la lumière et l'ombre d'influencer le plan.


Si vous vouliez faire un rendu d'image, il faudrait cocher Texface pour assigner l'U.V Mapping à votre plan, ainsi que A (Alpha) pour gérer la transparence. Et bien sur cocher UV dans la fenêtre RenderLayer.



Vous pouvez essayez de faire des viseurs un peu mieux si vous voulez, comme une ligne qui calculerai la trajectoire de la boule, ou un simple pointeur laser. :p



Maintenant que nous avons notre interface joueur/machine, le moteur physique, il ne nous reste plus que les règles du jeu ! C'est le plus rapide vous allez voir ! :D



Commencez par supprimer les boules rouges et jaunes jusqu'à ce qu'il n'y en ai plus qu'une de chaque couleur. Non ce n'est pas la seul chose à faire dans cette étape ! :P

Ajoutez un plan un peu plus grand que le tapis et ajoutez lui une propriété trou.
Il faut que ce plan soit juste en dessous du tapis et qu'il bloque les trou, il servira de détecteurs pour les trou ! :o



Mais c'est vraiment laid !




Ne vous en faites pas nous allons rendre ce détecteur invisible ! ;p




Maintenant, ajoutez à votre boule jaune ainsi qu'à votre boule rouge, un Sensor de type collision et tapez Trou après Property, ajoutez un controller And puis un actuator de type Edit Object, cliquez sur Add Object afin d'ouvrir un menu déroulant, là cliquez sur End object, ainsi les boules seront supprimez au fur et à mesure:D
Dupliquez ensuite vos boules afin d'en avoir 7 de chaque couleur, mais avant je vous demanderais d'ajouter une propriété Rouge et une propriété Jaune a vos deux boules de départ, ces propriété nous serviront pour un compteur de boule dans les prochain chapitre, autant que ce soit fait maintenant ; )
Sur la boule noir remplacez l'actuator End Object par un de type Scene, cliquez sur le menu déroulant et choisissez restart. Cela relancera la partie si vous mettez la noir !

Pour placez vos boules selon les règles regardez sur cette image ;D





Si vous avez essayez de faire une partie vous avez pu remarquez que lorsque l'on veut tirer, il faut faire attention de ne pas taper les autres boules, ou celle ci vole de partout !
J'ai la solution !


J'ai ajoutez deux Sensor de type Near (dont 1 inversé), c'est un radar qui détecte une propriété à partir d'un certaine distance de l'objet tout autour de lui ! J'ai donc ajouté une propriété Queue à ma queue, j'ai ensuite à peu près calculé la taille de ma boule grâce à la grille, ici 0,2, pour cacluler votre longueur sachez que un carreau =1 unité. Ne vous occupez pas du reset, il sert à envoyer un signal nul à une certaine distance de l'objet.

J'ai ensuite mis un actuator de type edit object puis choisi dynamics et Suspend Dynamic et un autre restore Dynamics. Même si nos objets sont des Rigid body, ils subissent également les règles de type Dynamic. En mettant en suspend la dynamique nous rendons notre objets Static, comme si on lui appliquait Ghost.

Faites de même pour toutes vos boules, puis dupliquez les !

Vous remarquerez qu'avec cette méthode, la bille arrête son mouvement le temps que la queue passe après elle reprends son mouvement. Cette méthode n'étant pas parfaite elle risque de modifier la trajectoire des boules, et même, dans le cas de plusieurs boules rapproché de taper dedans ! Il faut alors augmenter d'un peu la distance de détection des boules mais cela risque de gêner dans la progression du jeu ! Essayez de trouver le bonne équilibre. ;)
Edit: une mise à jour est effectuer dans les étapes supérieures !


Comme vous le savez (ou pas), lorsque la blanche tombe dans un trou il faut la remettre sur le tapis et donc il ne faut pas qu'elle soit supprimer. J'ai opter pour une méthode de remise en jeu par le joueur, et non automatique, ainsi le joueur décide où remettre sa boule.

Pour commencer ajouter au tapis la propriété Tapis. Ensuite ajouter à la blanche le même détecteur de collision que les rouges et les jaunes qui détectent la propriété Trou.

Faites attention au nom de vos propriété et particulièrement aux majuscules et 
minuscules, car ça compte pour la reconnaissance d'une propriété ! Choisissez de mettre soit des majuscules au début, ou bien que des minuscules, ou encore que des majuscules, mais ne faites pas les trois en même temps ! o_O

Reliez maintenant votre détecteur de collision, à un controller And, puis reliez celui ci à un actuator Motion, un Edit object, et un Property.


Dans l'actuator Motion, faites une translation de 3 sur l'axe Z global, désactivez donc Local, Dans Edit object, nous allons suspendre la dynamique pour permettre à notre bille de rester en l'air le temps qu'on la remette en place. Cliquez sur Add Object, dans le menu déroulant choisissez dynamic, par défaut il sera réglé sur Suspend Dynamic.

Ajoutez également une motion de trois vers le haut pour la queue, puis relié la au Controller de collision de la bille blanche, pour que notre queue ne tape pas dans les autres boules.

Et comme pour la caméra nous allons créer un système de propriété à incrémenter et à remettre à 0, afin d'être organisé dans la remise en jeu de la blanche, ici nous n'utiliserons qu'une seul propriété : blanche.

N'hésitez pas à donner un titre, ici j'ai mis blanche en attente qui est plus parlant que blanche = 1, et lorsque l'utilisateur aura choisi l'endroit ou descendre la blanche cette propriété sera à 0.

Nous allons également imposer au joueur la vue du dessus, pour qu'il ne se demande pas ou est passé ça bille, je vous le rappelle, elle est monté de 3 unités ! :P
Pour ce faire reliez le Sensor de collision à un nouveau Controller qui sera relié à la caméra, ici la caméra du dessus.


 Dans mon image j'avais déjà prévu le deuxième controller qui retourne à la caméra première personne, vous pouvez l'ajouter aussi.
Je vous rappelle que pour avoir accès à deux systèmes de briques, il faut sélectionnez les deux objets en questions dans la vue 3d, à l'aide de Shift et cliquez dessus. Vous pouvez aussi faire A pour tous sélectionnez dans la vue 3d, et n'ouvrir que les onglets des objets qui vous intéressent ! :D

Ajoutez maintenant un Sensor Property, qui vérifie que la blanche est égal à 1, quatre controllers And, et quatre actuators Motion, un qui avance sur l'axe des X, l'autre qui recule sur ce même axe, un autre avançant sur l'axe des Y, et enfin un autre qui recule sur ce même axe. Pour la vitesse de déplacement mettez 0.20 par exemple changez ensuite si vous le voulez.

N'oubliez pas que pour reculer sur un axe il faut mettre -0.20 ! :p
Reliez ensuite sensor propriété au quatre controller, et utilisez les touches Bas, Haut, Gauche, Droite que nous avions mis sur la queue pour les relier aux controller pour la mise en mouvement de la blanche. La propriété Blanche sert à empêcher à la blanche de bouger lorsque la bille est déjà en jeu ce qui ne serait pas très pratique. ^^


Nous allons assigner maintenant une une touche pour relâcher notre notre bille. J'ai choisi entré, mais vous pouvez mettre la touche que vous voulez comme d'habitude ! ^^
Il faut ensuite ajouter un Controller qui sera relié à deux Actuator, un de type Edit object pour réactivez la dynamique est un autre de type Property, qui assigne 0 à la propriété blanche.


Notre caméra sera de nouveau celle de base (1ère personne), ajoutez donc un nouveau controller à la caméra reliez à l'actuator Set Camera.



Attention  : Chaque propriété est propre à l'objet où elle à été créée, autrement dis une propriété appartient à l'objet ou vous l'avez créer et ne peut être modifier par un autre objet.
Par exemple, ici le sensor "BlancheEnAttente" est situé dans l'objet Billeblanche, ainsi que l'actuator "BlancheEnAttente". C'est deux briques agissent grâce à la propriété "Blanche" PROPRE à l'objet BilleBlanche. Maintenant, si vous ajoutez un sensor pour modifier la propriété Blanche, dans l'objet camera.001, cela ne fonctionnera tout simplement pas !
C'est un détail mais il peut être troublant, si vous sélectionné un objet il affichera sa propriété -pour peu que vous soyez déjà dans le menu logic- mais si vous faites Shift puis sélectionnez un deuxième objet, celui ci n'affichera que les propriété du dernier objet. 
De même si vous avez sélectionnez plusieurs objets et que vous ajoutez une propriété cela ajoutera la propriété au dernier objet sélectionner.

 Blender fonctionne de la même façon pour les calques, lorsque vous voulez déplacer plusieurs objets d'un calque à l'autre, cela ne déplacera que le dernier qui sera sélectionnée...

Comme vous le voyez nos briques logiques commencent à prendre de la place, vous pouvez cliquez gauche dans le vide et cliquer sur Horizontal ou Vertical afin d'adapter le menu aux briques. Ou utilisez Ctrl + molette pour zoomé/dézoomé et clique du milieu pour se déplacer.


Testez régulièrement votre jeu, afin de vérifier au fur et à mesure les différentes erreurs que vous auriez pu faire. ;)

Ajoutez ensuite un Sensor de type Propriété qui vérifie que la variable blanche est à 0. Si oui alors on peut bouger la queue. Reliez donc ce Sensor à chaque Controller de la queue, afin d'éviter que la queue bouge et ne tape les autres boules.


Par sécurité je vous conseil de réglé la marge de collision au minimum pour la bille blanche le menu ce situe sur la ligne de sélection du type d'objet (dynamique statique, rigide etc...) juste à droite d'invisible, il y a le bouton advanced, sinon vous risquez d'avoir votre bille qui passe à travers le billard en tombant ! o_O



Activez Enable all frame dans le menu game afin d'éviter les ralentissements !

Ce tutoriel n'est pas finit je suis entrain de faire des améliorations(animation d'objet, compteur de point, IA!). Mais rien ne vous empêche de faire vos propres améliorations !

J'espère que vous êtes fier d'avoir créé ce beau jeu de billard ! Salut !
-->


Vous vous souvenez de la fenêtre où on règle le champs de vision, ou le field of view ? Eh bien nous allons changez l'angle de vue grâce des animations qui s'activeront au cours du jeu.

Commencez par aller dans le menu editing F9 en ayant cliqué sur la caméra. Vérifiez que vous êtes sur la première frame.


Les frames sont représentative du temps pour une animation, mais dans le game engine, vous avez la possibilité de les activer qu'à certain moment et de reprendre l'animation quand vous le voulez, vous pouvez même les jouer en inverse, il faudra bien sur choisir pour quel objet de la scène elles s'activent, dans le game engine chaque objet à donc une suite de frame qui lui est réservé ce qui s'avère utile si on ne veut jouer qu'une seule animation et pas toute en même temps.

Pour créer l'animation il va falloir insérer des clés d'animation aux différentes frames de notre animation, Blender se chargera de calculer la différence entre deux frames où vous avez insérées des clées d'animations et qui formeront une courbe IPO (courbe d'interpolation) que vous pourrez modifiez. Nous allons par exemple essayez de changer le zoom de la caméra grâce au lens (objectif).

Appuyez sur I dans le menu de la caméra (F9) un menu apparaît, choisissez Lens, allez ensuite à la frame 35 augmentez de 10 le Lens, puis recommencez l'opération, I/lens.


Vérifiez que lorsque vous appuyez sur I, vous ayez bien la souris dans le menu de la caméra, c'est à dire en ayant sélectionnez la caméra, puis appuyez sur F9 pour être dans l'onglet Editing, et surtout que votre souris soit bien sur le menu et non dans la vue 3d!

Passez à la vue caméra, raccourci 0, puis faites Alt+A pour voir votre animation.

Pour voir l'animation sur une courbe IPO, scindez l'écran afin de créer une nouvelle fenêtre, puis sélectionnez IPO curve editor comme dans l'image ci dessous.


Dans cette fenêtre nous avons le temps en abscisse, axe horizontal, et les différents paramètres de l'objets en coordonnées, axe vertical, sélectionnez donc l'objet dont nous allons modifier l'animation, une caméra:


Les propriétés modifiables y sont inscrites, le lens, valeur que nous venons de modifier, le clipping, start et end, le start indique la distance minimal à laquel la caméra voit tandis que le end indique la distance maximal, Apert ne servirait à rien XD, dans la version 2.49 en tout cas, Fdist pour la distance focal, cette donnée ne sert que pour les rendus en mode jeu elle ne servira à rien,

Enfin shift X et Y, vous serviront à modifier directement les coordonnées des champs en pointillés de la caméra, qui est en fait le champs réels de la caméra en mode rendu, pour le mode jeu, il nous servira juste de point de repère pour toutes les caméra. En effet il faudra se placer dans une caméra et choisir un champs grâce à la molette, vous pouvez très bien choisir le cadre rose qui délimite la caméra physique, mais je vous conseil de vous contentez des pointillées, car ils sont modifiables, vous pourrez donc choisir modifié la taille de votre repère et donc de votre fenêtre au cas ou.
Attention, ce ne sont que des repères, il faut ensuite adapter votre fenêtre dans votre plan de travail, pour avoir la vision que vous aurez Ingame. Si vous enlevez chaque module vous obtiendrez une fenêtre pleine écran, et pourrez adaptez votre champs de caméra. N'oubliez pas non plus que le zoom que vous effectuerez depuis la vue caméra, grâce à la molette, restera le même pour toutes les caméra, ce qui veut dire que tout les caméra doivent être re-vérifié sans toucher à votre mollette de souris, avant de lancer le jeu, afin que les réglages soit justes ou vous risquez d'avoir des caméra avec un zoom trop ou peu important !

Dans la fenêtre IPO vous verrez que la courbe sur laquelle vous avez agie, ici lens, aura un petit bouton de couleur, il vous permet de sélectionnez cette courbe.

Vous pourrez encore modifiés quelques effets caméra dans ce menu:


Les paramètres Framing et Fullscreen ne seront disponible Ingame que si vous créez un runtime de votre jeu, faites des recherches si vous voulez en savoir plus car je ne peu faire de runtime sur mon mac ;( .

Assignez ensuite votre animation à une touche du clavier (lorsque vous avancez ou reculez...).
Si vous voulez faire une animation de tir pour la queue, je vous conseil de lire la suite !


Tout d'abords si vous avez parenté votre queue à un objet manuellement, sans passer par les briques logiques,  en faisant Ctrl+P, alors annulez cette parenté en faisant Alt+P, si vous avez fait comme je vous ai montré, c'est à dire en passant par les briques logiques, alors vous n'avez rien besoin d'annuler. Même si vous avez de l'expérience dans blender et que vous avez préféré faire des Ctrl+P sans passez par les logiques briques il faut annuler ces parentés, car si vous aviez faits une erreur, comme mettre le cadre parent à votre queue, au lieu de mettre celui ci enfant, ou même si vous n'aviez aucune erreur, cela risque de nous gêner pour la suite.

Attention l'ordre des étapes est très important !


Sélectionnez votre queue puis placez la sur un autre calque pour pouvoir travailler pépère. Changez donc le layer dans le menu de l'objet Queue.


 Là votre objet disparait, il a changé de calque, mais pas vous, changez donc de calque, la sélection du calque se fait dans la barre du milieu, juste à droite de l'endroit ou les axes, Local Global Normal, sont affichés.

Maintenant que vous êtes dans votre 2èmes calques, créer un empty: Add->Empty.
Vérifiez que c'est votre Empty qui est sélectionné.

Ensuite utilisé la commande shift+S puis choisissez Cursor->Selection, afin de placer le curseur (celui qui détermine, par exemple ,l'emplacement de tout objet que vous ajoutez à la scène) au centre de l'Empty comme dans l'image ci dessous.


Sélectionnez maintenant votre queue, puis réitérez la commande Shift+S, mais sélectionnez cette fois Sélection -> Cursor, cela va placer le centre de notre sélection, ici la queue, sur notre curseur, celui ci étant placer sur le centre de l'empty, nous plaçons le centre de la sélection sur le centre de l'empty.


Avec cette technique vous pourrez placez correctement votre queue face à la bille blanche ! ;-o
 Nous allons maintenant utiliser l'empty comme parent pour la queue.
Pourquoi ? Cela va éviter à notre animation de ne jouer qu'à un seul endroit,  grâce à ce système, la queue considère en fait l'empty comme les coordonnées 0:0:0 autrement dit le centre du monde. Ainsi nous n'aurons qu'à déplacer notre empty pour faire bouger la queue, puis à jouer l'animation une fois l'empty en place. Ce sera plus clair lorsque  nous ferons l'animation.
Sélectionnez donc d'abord la queue puis l'empty afin de rendre la queue enfant à notre empty.


Nous effectuez le parentage manuellement, directement dans la scène,  sans passer par des briques. La queue sera tout de même parenté dans le jeu, mais c'est surtout pour que les mesures lors de l'animation soit bonne.

Si vous avez compris pourquoi nous avons fait ça tant mieux, sinon vous allez comprendre en lisant la suite.

Commencez par ouvrir l'IPO curve editor dans une nouvelle fenêtre, comme pour la caméra sauf qu'au lieu de choisir Camera dans la liste déroulante vous choisirez Objet (si vous ne l'avez pas modifié il est par défaut sur objet).

Ensuite vérifiez que vous êtes à la frame 1, puis appuyez sur I dans la vue 3d, cela va nous permettre d'ajouter une clé d'interpolation.


Rien ne change par rapport à l'animation de la caméra, si ce n'est qu'au lieu de modifier un angle de vue, nous allons modifiez des coordonnées d'objets.

Moi je fais une animation qui ne modifiera que la rotation et la translation, je choisis donc LocRot pour la frame 1.

Scale sert à agrandir ou réduire l'objet, il ne va donc pas servir.
Mesh servira pour les interpolations de forme par exemple... Je ne sais pas à quoi servent visual loc etc... Il va falloir chercher si vous voulez savoir :P

Après avoir sélectionné une clé LocRot allez à la frame 20 puis modifiez la position de votre queue.


Maintenant repassez à la frame 1, et faites Alt+A pour lire votre animation, si elle vous convient alors tant mieux :D, sinon allez sur la frame 20 et faite Alt+I pour annuler la clé présente à cette endroit et en recommencer une !

Voila ce que vous devriez obtenir dans la fenêtre IPO curve editor une fois l'animation terminé:


Chaque couleur représente une modification sur un axe x, y, z comme la; rotation,  coordonnée(loc), taille(scale) et j'en passe, représenté par une courbe d'une même couleur. 
Les chiffres horizontal représente le temps, ceux verticaux, la distance effectué ou la rotation et le pourcentage de mise à l'échelle etc... Comme vous voyez se situe non loin du zero (sauf pour la rotation Z qui est en degré), car nous avons fait cette animation au centre du monde, donc au point 0;0;0, ce qui permettra de centrer l'animation sur l'empty, car il  est considéré comme centre du x du y et du z. Si nous n'avions pas créer d'empty alors l'animation serait joué toujours au même endroit dans l'environnement 3d,  la non l'animation suit les déplacement de l'empty qui est parent de notre queue.

Ici  vous pouvez déplacez chaque point, en sélectionnant la courbe qui vous intéresse et en passant en mode édition avec la touche Tab.


Comme vous le voyez dans l'IPO curve editor, lorsque vous passez en mode édition, alors vous avez accès à chaque clé  de votre animation.

Remarquez que vous avez des petites manettes afin de modifié la courbe d'animation, en utilisant un des deux points extérieurs de la manette vous pourrez modifiez cette  courbe et donc l'animation. Si vous n'arrivez pas a obtenir de résultat, subdivisez votre courbe en sélectionnant plusieurs point avec shift+Clique Gauche cela désignera la surface de subdivision, et appuyez sur W, pour subdiviser.

Évidemment cette courbe n'est la que pour corriger ou améliorer votre animation, mais n'est pas absolument indispensable pour une animation aussi simple, mais reste très pratique !

Testez voter animation avec alt+A si elle vous convient, remettez l'Empty et la queue sur le calque 1, vous ne pouvez changez de calque qu'un objet à la fois il va donc falloir le faire tour à tour pour chaque objet.

Vous remarquerez que notre empty n'as aucune brique lié à lui, il ne sert pour l'instant que de point de repère pour l'animation de notre queue.

Nous allons en fait supprimer toutes les briques de mouvements ainsi que le tracking de notre queue pour les mettre sur notre Empty qui est maintenant parent de notre queue, comme ceci :


Testé si la queue bouge bien dans le jeu !

Il ne reste plus qu'as rajouté une touche pour jouer l'animation et le tour est joué ;)
Pour ça ajouté à la queue une brique Sensors de type Keyboard avec la touche de votre choix, un controller And, et un Actuator de type IPO où vous indiquerez le début et la fin de votre animation.


Vous remarquerez qu'il existe plusieurs type d'animation, j'ai choisi Flipper, elle va lire mon animation de la frame 0 vers la frame 20 tant que l'utilisateur appuiera sur la touche G et s'arrètera à 20, mais dès qu'il relâche la touche alors il lit l'animation à l'envers de la frame 20 vers la frame 0.

Si votre camera ne suit pas InGame c'est normal il faut mettre Empty dans sa brique parent pour qu'elle le suive.

 Si votre queue à des problèmes d'orientation lorsque vous jouez l'animation, alors supprimez l'animation dans l'ipo editor (sélectionnez toutes les courbes avec et appuyer sur suppr )puis replacez votre queue au centre du monde en annulant toute ses modifications grâce à Alt+G et Alt+R en mode Objet et sur le deuxième calque pour ne pas être gêné. Vous pourrez voir alors voir si votre queue est mal centré par rapport à votre point, ça peut arriver et tirer de travers ! Réajustez donc son orientation en passant en mode édition, puis sélectionnez tout l'objet grâce à A et placez le mesh de façon à ce qu'il soit parallèle aux axes. Vous pouvez vérifier l'angle dans l'onglet propriété, touche de raccourci N.

Ensuite sélectionnez votre queue puis l'empty et faites Ctrl+P pour que la queue soit enfant de l'empty et refaites votre animation et n'oubliez pas que l'empty est également au centre de la scène !
Si vous voulez déplacez la queue il faudra maintenant déplacez l'empty. 

Testez pour faire votre propre système de tir !


Nous allons maintenant tracker la queue face à la bille de façon à ne plus avoir à utiliser les touches pour monter et se baisser.

Il suffit de cocher 3D dans la case tracking :


Les touches pour se baisser et monter serviront désormais a taper en haut en dessous de la bille.


Nous allons utiliser deux images pour notre compteur de boule.



 Remplacez donc le l'image du OK qui nous servait à viser avant, maintenant notre boule est automatiquement visée grâce au tracking 3d, par une de ces deux images. Pour ça il faut donc créer une fenêtre UV mapping, si vous ne souvenez plus regardez dans le tuto précédent au chapitre uv mapping!

 Dans la fenêtre 3d sélectionnez votre plan, et passez en mode edition avec tabulation, sélectionnez toute les faces avec (attention elle seront déselctionnné si au moins une face étais sélectionnée avant !).
 Il faut ensuite utiliser le raccourci U pour Unwrap, et ensuite charger l'image dans la fenêtre UV mapping. Si vous avez une face blanche vérifiez que l'affichage est bien en mode textured ! Si la face est transparente vérifiez que le plan est dans le bon sens, car chaque face dans blender a un coté transparent et un autre remplit soit d'une texture, soit d'une couleur ;)

 Notez que l'ordre de ces opérations est très important !

Supprimez sur le plan, les briques qui détectent la boule blanche mais ne supprimez pas la parenté avec la camera ;) ! Nous allons maintenant utiliser un nouveau système pour l'affichage :o

Dupliquez le plan puis changez son image par la deuxième couleur.

Changez aussi le nom des deux plans, dans le panneau editing F9 n'oubliez pas changez dans le nom de l'objet dans le champs OB, le champs ME ne concerne pas les briques mais le types d'objet ;) , renommez en un avec l'alias Compterouge et l'autre logiquement... Comptejaune ! On avance XD !


Résultat nous avons deux indicateurs avec une boule de chaque couleur !

Si dans les chapitres précédent vous n'aviez pas ajoutez de propriété jaune et rouge à vos deux types de boules, alors supprimez toute les boules jaunes et rouges mais gardez en une de chaque couleur, rajoutez leur une propriété avec pour nom leur couleur, peut importe le type laissez int ;)
Puis dupliquez les afin d'avoir 7 billes de chaque couleurs.

Bien, maintenant déplacez les deux plans sur un autre calque. Hein?! Je viens de faire un UV mapping sur ces deux plans tout ça pour qu'il se retrouve sur un autre calque, mais toi tu vas recevoir une claque !

Calmez vous ^^, nous avons besoin de les déplacez car nous allons en fait dupliquer cette objet à chaque fois qu'une bille touchera le trou, et pour rajouter un objet sur un calque il faut que l'objet à ajouter soit présent sur un autre calque. Tel est la règle dans Blender :P

Ajoutez ensuite un empty devant la camera, puis réduisez un peu sa taille grâce au menu editing (F9).


Vous pouvez également changez leur apparence dans le menu. Ces Empty serviront de repère pour afficher les points.

Sélectionnez ensuite le plan qui sert de trou et détecte les boules qui tombent dessus :p, ajoutez lui les briques suivantes :


Comme vous le voyez il n'y a pas d'action reliée à nos conditions (ou d'actuator relié au sensor). Sélectionnez donc l'empty, que vous aurez renommé ; Affichage par exemple, à l'aide de la touche Shift afin d'avoir le système de brique du vide et de l'affichage.

Pour faire un jeu complexe cela devient vite n'importe quoi, d'ailleurs vous remarquerez qu'en sélectionnant un deux objets vous n'aurez pas accès à l'affichage de toute les variables juste celle du premier objet, même si elles sont toujours toute présente.

C'est pourquoi Blender dispose d'un script pour coder directement dans un éditeur de texte en python, selon les versions il y a des mise à jours, je n'en parlerais pas dans ce tuto mais la doc est disponible sur internet.

Une fois le plan qui sert de vide et l'empty sélectionné, alors ajoutez un actuator de type Edit Object sur l'empty Affichage, par défaut il est réglé sur Add Object, rajoutez dans le champs OB Comptejaune ou Compte rouge, faites attention au majuscule, vérifiez sur l'autre calque le nom des deux plans ;D.
Vous remarquerez qu'il y a d'autres paramètres à cette fonction comme Time qui déterminent la durée de l'objet ajouté, laissez 0 pour qu'il reste indéfiniment. Les autres servent à donner une poussée de départ, très pratique pour simuler un boulet de canon par exemple :)

Puis reliez le avec un controller du vide qui détectent les billes jaunes, ou les billes rouges à vous de voir par lequel vous commencez. Remarquez qu'il faut les reliez sur un sensor qui est attribué à affichage sinon il l'ajoutera sur Vide et notre Empty affichage n'aurait pas grands intérêts ^^ !



 N'oubliez pas que notre empty doit suivre le joueur ;)


N'oubliez pas que les plan aussi sont sensés suivre la camera, donc si vous les aviez supprimés il faut rajouter cette parenté.

Cochez également Tap afin que le point reste affichée à l'écran ;\
Tap pourraient être comparé à un levier qu'on enclenche une fois la condition rempli et qui ne retourne pas en position off lorsque la condition n'est plus rempli.
Tandis que sans Tap de coché la brique agiraient plus comme un bouton poussoir, où il faudrait rester appuyer dessus pour qu'il reste dans sa position. Ainsi notre condition pour actionner le sensor sera toujours à 1 lorsque la collision de la bille avec le trou aura lieu, ainsi notre point ne se volatilisera pas :D 


Astuce :

 Pour bien orienter un plan face à votre camera vous pouvez rajoutez un tracking vers la camera ainsi l'objet sera toujours tourné face à la caméra et donnera l'illusion de ne pas bouger :-° . Mais dans notre cas l'affichage doit bouger et sera dupliqué, cela complique les choses donc ne l'utilisez pas ... mais vous pouvez faire quelque test, ou sinon essayer plutôt l'astuce suivante :
Vous pouvez également sélectionnez votre caméra et votre empty et non pas le plan cette fois. Et oui ! c'est l'empty qui décidera de l'orientation de votre objet et non pas le plan que vous pourrez placez comme vous voulez ! Car lorsqu'il ajoutera votre objet d'affichage, son axe local sera copié sur l'axe de votre empty ;D 
La fin de l'astuce donc, une fois la caméra et l'empty sélectionner, sélectionnez la fonction align to transform orientation, ainsi vos deux objets seront alignés !


Vous aurez ensuite un menu déroulant, sélectionnez local, pour que les deux objets s'alignent bien sur leur propre axe et non global.
Il existe un tas de transformation à appliquer aux objets amusez vous xD


Vérifiez maintenant que votre affichage fonctionne en testant avec la touche P.

Nous allons maintenant utiliser les variables jaunes et rouges pour compter véritablement.
Pour commencer, il faut supprimer toutes les briques logiques de votre affichage.

Ensuite dans le vide, il faudra ajouter celle-ci :


N'oubliez pas d'ajouter les deux propriétées jaune et rouge, sinon ça ne marche pas ;o
Vérifiez bien l'actuator property est réglé sur Add et non Assign !
La différence sera que avec assign on assignera toujours à la variable jaune la même valeur inscrite dans le champs à chaque fois que le sensors sera positif, tandis qu'avec Add on fera l'addition de la valeur actuel de jaune à celle présente dans le champs.

Vous vous souvenez quand je vous avait dit qu'il étais compliqué d'utiliser une variable d'un objet à l'autre, et bien il y a une solution, il suffit d'utiliser Copy Property de l'actuator Edit object .

Voici donc le nouveau schéma de brique de votre affichage :


Qu'est ce que c'est que c'est truc *ouch*
Pas de panique je vais vous expliquer une à une chaque brique :

La première ; Always, nous l'avons déjà vu, ici elle est relié à un sensor qui parente notre objet à la caméra.

Petite parenthèse tout à l'heure je vous avais dis de relier l'empty affichage à la queue, mais ce n'est pas bon car si votre plan d'affichage (2èmes calques) qui apparaitra est parenté à la camera, et que l'Empty d'affichage (1er calque) est parenté à la queue, lorsque l'empty ajoutera le plan qui représente le point et que votre queue bouge ( à la fin de l'animation après un coups par exemple), alors le plan qui représente le point que vous venez de marquer ou non,  sera ajouté aléatoirement au cours de l'animation donc de forte chance qu'il apparaisse au mauvais endroit.

En bref si vous faites des parentés vérifiez toujours les parentés entre les différents objets ainsi que tous ce qui influera sur leur mouvement : exemple ici, le tracking qui est une forme de parenté, ou animation qui modifiera l'emplacement de votre objet.

Si vous n'avez pas compris, ce n'est pas grave vous comprendrez en faisant, toute ce qu'il faut savoir c'est qu'il faut garder le même objet en parent sur l'empty et le plan qui représente le point.

Après cette "petite" parenthèse, passons au deuxième sensors, celui réagis lorsque la propriété jaune est à 1, donc lorsque celle ci est à 1, comme tout à l'heure on ajoute notre affichage à l'écran.

Le troisième sensors est un peu spécial, il s'agit du sensor always, avec l'ajout du pulse mode . Avant de vous l'expliquer je voudrais d'abord expliquer a quoi sert l'acutator.
C'est en fait une brique qui va copier la propriété d'un autre objet sur la propriété de l'objet sur lequel elle est.
Cette fonction à été créer car on ne peut utiliser la propriété d'un autre objet à moins de relier les briques des deux objets directement entre elle. Mais cela reste compiqué, car nous devront dupliquer notre empty afin d'avoir plusieurs point quand même :P

On copie donc la propriété jaune de plan Vide, sur la propriété jaune de notre Empty Affichage, ces deux propriété ont le même nom mais sur deux objets différents deviennent différentes !

Maintenant qu'est ce que le pulse mode ?
Cela est présent en fait sur tout les actuator et ressemblent à ça.

Les 3 petits points servent à l'activer en mode TRUE ou FALSE ou les deux en même temps.
Le f, signifie frame, et détermine le temps entre chaque pulsation, comme son nom l'indique. Sur 0, il n'y aura aucun temps de pause. Il envoie toujours le signal TRUE.

On utilise le pulse mode dans cette situation, car l'actuator qui copie la valeur de jaune n'a  aucun moyen de savoir quand est ce que la valeur aura changé, à moins de relié l'affichage directement au vide, mais pour éviter de perdre du temps avec un tache aussi fastidieuse (il faudrait relier 14 affichages), on copie tout le temps la valeur de la propriété jaune sur notre affichage.
Si Always étaient relié sans pulse mode, il n'enverrait qu'un signal dès le début du lancement du jeu, et ne se réenclencherait pas après, ce qui convient pour l'actuator Set parent, mais pas pour Copy ;)

Copié cette empty 6 fois et changez la valeur de jaune sur le sensor propriété, ainsi lorsque vous mettez un point le première affichage apparait, deux un autre etc...
Ne pas oublier de copier encore une fois pour mettre les rouges, et donc changez la propriété jaune en rouge cette fois ci !

Il y a toujours un petit bug que je n'arrive pas à éliminer, nous allons donc faire avec !
Il s'agit de l'affichage, lorsque vous marquez un point et que que vous tournez autour de la bille blanche en continu, le point apparaitra un peu décalé, cela peut venir du fait que la queue est focaliser sur la bille, et si elle bouge en même temps il y aura un petit décalage...
Je n'ai aucune solution pour l'instant...

Egalement, si votre queue tire de travers, réduisez le bout de la queue, pour qu'elle soit plus en pic.Si il y a trop de surface la queue peut tout simplement dévier, en plus du problème de tracking qui décale toujours un peu la queue, lors d'un mouvement, même un mouvement vers sa cible !
Un peu complexe tout ça ^^


Bref,
Dans la prochaine partie nous allons donc créer une intelligence artificielle, et un système de tour par tour, nous interromprons le mouvement après chaque coups afin d'éviter de voir les points se décaler à l'écran :s
Nous ajouterons du son, et peut être un petit système de trajectoire ;)
Le lien du .blend pour les test ! à plus !

4 commentaires:

  1. Bonjour! Je suis intéressée par ce tutoriel blender de billard pour l'importer sur Unity. Tout ça dans le cadre d'un projet 3D. Je suis actuellement sur un blender 2.91, est-ce que le tutoriel est toujours valable ou existe-t-il un update ailleurs?
    En espérant avoir une réponse. :)
    Bonne journée!

    RépondreSupprimer
    Réponses
    1. bonjour, désolé de la réponse tardive.
      Ce tuto n'a toujours pas été mise à jour mais je compte bien lui redonner un petit coups de jeune dans peu de temps.
      Il n'y a pas d'update pour les versions récentes de blender car le game engine à été abandonné dans la version 2.8. Cependant j'imagine que vous avez changé de projet depuis le temps que je réponde ...
      Si vous avez d'autre question n'hésitez pas.

      Supprimer
  2. Ce commentaire a été supprimé par l'auteur.

    RépondreSupprimer
  3. Ce commentaire a été supprimé par l'auteur.

    RépondreSupprimer

Postez un bon com's !