![]() |
Premiers pas avec Unity3D : "open a door" (part II) |
![]() |
Pendant ce TP vous allez réaliser un "jeu" simple permettant à un joueur d'ouvrir (ou non) une porte sur un clic de souris. Pour voir le résultat escompté vous pouvez voir un exemple du JEU en cliquant sur le lien ou dans la fenetre ci-contre |
Les joints sont très utilisés dans les jeux et pas seulement pour ouvrir des portes !
Une vidéo -un peu longue (30min) présente de nombreuses utilisation des hingeJoints dans Unity.
Une autre plus courte (3min) montre comment faire osciller la tête d'un personnage.
Open a door (part I). | < |
![]() |
> |
Open a door (part III) |
Step 1 : Une porte "physique"La porte définie dans la partie I est purement géométrique. Les interactions avec la souris (OnMouse) utilisent le Collider de chaque objet géométrique. Nous allons maintenant créer une porte qui réagit au contraintes du monde physique (à la gravité du moins).Pour faire de la physique il faut associer un Rigidbody à l'objet à l'aide de "Add Component". Creez une porte simple (cube), associez un Rigidbody et vérifiez que la porte tombe dans le mode Game. Les champs du composant RigidBody sont expliqués dans l'onglet associé : le petit livre [?]. Vous pouvez la maintenir en l'air en désactivant "use gravity" ou alors ajouter un sol (sans Rigidbody) sur lequel elle va reposer. Notez que la "chute" n'est pas très réaliste et que les paramètres du RigidBody n'y font rien. |
![]() |
Step 2 : Ajouter une force à la sourisUn simple script C# va nous permettre d'appliquer une force à la porte (pour l'ouvrir) sur un simple clic de souris pour l'exemple.Le composant Rigidbody associé à l'objet peut être réccupéré dans le script simplement avec la fonction "GetComponent" comme dans l'exemple ci-dessous : private Rigidbody rb; rb = GetComponent<Rigidbody>(); La force ne sera appliquée que si le bouton de la souris est pressé void OnMouseDown(){... rb.AddForce(Fvector, ForceMode); } Avec Fvector = forceDirection * forceAmount; forceAmount pourrait être une variable publique pour être facilement modifiée : public float forceAmount; Pour commencer : forceDirection sera fixée à transform.forward. ForceMode sera fixée à ForceMode.Acceleration (qui ignore la masse de l'object auquel elle est appliquée) Ecrivez le script que vous appliquerez à la porte. Passez en mode Game pour vérifier que la force s'applique correctement. Si c'est le cas, la porte devrait tomber à plat au premier clic. Tombe t-elle du "bon" côté ? Pouquoi ? Extensions et réflexions : Supposons que la vue soit "à la première personne". La caméra donne alors la position et l'orientation du joueur ; elle permet de connaitre la direction de la force "appliquée" par la souris. Matrix4x4 m = Camera.main.cameraToWorldMatrix; Vector3 forceDirection = m.MultiplyPoint(new Vector3(0, 0, X)); Que mettre en X pour que la porte tomber à plat du "bon" côté ? Augmenter la force avec la durée d'enfoncement de la souris... |
![]() |
Step 3 : Les jointsPour que la porte tourne autour de sa charnière il faut bloquer certains degrés de liberté. Nous allons lui associer un hingeJoint.La documentation en ligne s'obtient simplement en cliquant sur le petit livre [?] à droite du composant. Ci-dessous quelques explications succinctes des principaux paramètres pour l'utilisation présente :
|
![]() |
Et pour aller plus loin avec les jointsLes joints sont très utilisés dans les jeux et pas seulement pour ouvrir des portes ! |
![]() |
Open a door (part I). | < |
![]() ![]() |
> |
Open a door (part III). |