Ges on de la souris II
Transcription
Ges on de la souris II
582‐447 Assemblage de jeu TIM ‐ Techniques d'intégra on mul média Ges on de la souris II Détec on des clics de la souris (dans la fonc on Update() d’un objet) Input.GetKey(KeyCode.Mouse0) ‐‐ détecte le bouton gauche de la souris (KeyCode.Mouse1: bouton milieu, KeyCode.Mouse2: bouton de droite) ou Input.GetMouseBu on(numBouton:int) , Permet de détecter quel bouton de la souris est appuyé (0 : bouton gauche, 1 : bouton de centre et 2 : bouton de droite). Exemple func on Update () { //si le bouton gauche est appuyé et on peut rer, alors on re con nuellement if (Input.GetKey(KeyCode.Mouse0) && peutTirer == true ) { TirerBalle(); } if (Input.GetMouseBu onDown( 2) && peutLancerBanane == true ) { LancerBanane(); } } Remarque : Dans Unity il existe des boutons virtuels qu'il est possible de définir dans: Edit → Project Se ngs → Input Exemple: Input.GetBu on(“Fire1”) // détecte le bouton gauche de la souris ou la touche CTRL du clavier ou le bouton 0 d'une mane e de jeu. Pour détecter les boutons d’une mane e de jeu Exemple : Input.GetKey(KeyCode.Joys ck1Bu on0) ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ Détecter le mouvement de la souris Input.GetAxis(“MouseX”) et I nput.GetAxis(“MouseY”) Retourne la quan té de déplacement de la souris selon l’axe X ou Y entre deux frames. Un déplacement vers la gauche retourne une valeur néga ve alors qu'un déplacement vers la droite retourne une valeur posi ve. Les valeurs retournées peuvent être plus grandes que 1 ou plus pe tes que ‐1. © Mathieu Dionne et Vahik Toroussian, Hiver 2016 582‐447 Assemblage de jeu TIM ‐ Techniques d'intégra on mul média Exemple // Ges on de rota on du personnage à l’aide de la souris //Tourne l’objet selon le mouvement horizontal de la souris //Tourne la caméra selon le mouvement ver cal de la souris (pour une caméra FPS) var vitesseHorizontale : float = 2.0 ; var vitesseVer cale : float = 2.0 ; var camera:GameObject; func on Update () { // Ob ent la varia on de la posi on de la souris. var h : float =Input.GetAxis ( "Mouse X" ) * vitesseHorizontale ; transform.Rotate ( 0, h, 0) ; var v : float = Input.GetAxis ( "Mouse Y" ) * vitesseVer cale ; camera.transform.Rotate (v, 0, 0) ; } ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ Exercice par e 1 ● Dans le projet de SurvieShooter , ajoutez le Prefab de par cules de r ( GunPar cles ) qui se trouve dans Project/Prefabs sur la tête de fusil (objet GunBarrelEnd). ● Ajoutez le son PlayerGunShot et une lumière de type pointLight de couleur jaune sur la par cule de r. Ajoutez ces éléments en les glissant sur l’objet dans la fenêtre Hierarchy . Ainsi, ils seront posi onnés et orientés comme la tête de fusil. ● Testez et désac vez la par cule. Lorsque la par cule sera ac vée, le son jouera et la lumière s'ac vera. ● Dans le script du personnage, ○ Déclarez deux variables de types GameObject, une pour la par cule de r et l’autre pour la par cule de contact de r HitPar cles qui se trouve dans l’onglet projet dans le dossier Prefab . Ini alisez ces variables dans l’inspecteur. ○ Lorsque le bouton gauche de la souris est appuyé alors la par cule de r s’ac ve pendant 0.1 seconde (la durée de la par cule).Elle est ensuite désac vée. U lisez une fonc on (exemple: TirerBalle) pour pouvoir u liser la commande yield Wai orseconds (qu’on ne peut pas u liser dans la fonc on Update() ). ○ Pour empêcher de rer trop rapidement , u lisez une variable booléenne (peutTirer) qui se met à faux lorsque la fonc on TirerBalle est appelée et qui redevient vraie lorsque le délai pour jouer la par cule de r est terminé. © Mathieu Dionne et Vahik Toroussian, Hiver 2016 582‐447 Assemblage de jeu TIM ‐ Techniques d'intégra on mul média Créa on d’objets en temps réel Tous les gameObjects peuvent être copiés dynamiquement. Il est également possible de créer une copie (ou instance) d’un élément préfabriqué (« Prefab »). Lorsque l’on instancie un Prefab , la posi on et l’orienta on d’origine seront appliquées si aucune autre valeur de posi on et de rota on n’est fournie. Instan ate (objetADupliquer : GameObject, posi on : Vector3, rota on : Quaternion) Instan ate(objetADupliquer); //crée une copie de l’objet au même endroit que l’objet d’origine var clone = Instan ate(objetADupliquer); // il faut mémoriser la référence de l’objet clone, s’il faut le modifier Exemple var PrefabPar cule:GameObject; func on Update () { if (Input.GetKey(KeyCode.Mouse0) && peutTirer == true ) // si un clic gauche et on peut rer { TirerBalle(); } } // Crée un clone de l’objet à la même posi on et rota on que l’objet du scripte. func on TirerBalle() { Instan ate(PrefabPar cule,transform.posi on, transform.rota on); //ou var clonePar cule = Instan ate(PrefabPar cule); clonePar cule.transform.posi on = transform.posi on; clonePar cule.transform.rota on = transform.rota on; yield WaitForSeconds(. 4) ; Destroy(clonePar cule); //détruit le clone après 0.4 seconde } ‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐‐ Exercice par e 2 ● Dans la fonc on de TirerBalle() , ajoutez le code pour détecter si une cible est touchée par le r (ce e par e doit être avant l’instruc on yield ). ‐ Il faut u liser un Physics.Raycast pour détecter quel objet est devant le fusil. © Mathieu Dionne et Vahik Toroussian, Hiver 2016 582‐447 Assemblage de jeu TIM ‐ Techniques d'intégra on mul média ‐ l’origine (avec un peu d’ajustement en hauteur) et la direc on du Raycast peuvent être celui du personnage ou la tête de fusil (à votre choix). Truc de débogage : imprimer le nom de l’objet touché avec un print() et dessiner le rayon Raycast à l’aide de Debug.Draw(), avant d’aller plus loin. ● Créez dynamiquement une copie de la par cule HitPar cle à la posi on de contact du Raycast avec l’objet touché. ● Défi : ajoutez une ligne de r pour voir la trajectoire du r. Vous pouvez u liser un objet ayant son point de pivot à sa base, et qui est placé au même endroit que la tête de fusil. Sa longueur est ajustée selon Raycast.distance . © Mathieu Dionne et Vahik Toroussian, Hiver 2016