Portal Coop

Lien Github du projet ➡

📃 Description du projet

Projet réalisé dans le cadre du module IEVA (Interaction with Virtual or Augmented Reality Environments) de mon double diplôme SIIA (Intelligent and Autonomous Interactive System). Ce projet consistait à mettre en place avec succès des interactions multi-utilisateurs dans un monde virtuel. Par exemple en mettant en place des interactions avec des objets qui ne peuvent être réalisées par un seul utilisateur.

Pour y parvenir, Unity3D a été utilisé pour créer le monde virtuel et Photon a été utilisé pour synchroniser toutes les actions entre les différentes machines.

Ayant toujours voulu faire un jeu avec Unity3D, j'ai combiné le désir personnel de faire un jeu avec ce projet scolaire.

♠ But du jeu

Vous vous trouvez dans une salle d'essai du célèbre laboratoire Aperture Science. Ce test est conçu pour tester votre capacité à interagir et à collaborer avec d'autres personnes dans un monde virtuel par le biais de leurs avatars respectifs.

Vous devrez analyser les différents éléments qui composent la pièce afin de comprendre comment sortir de la pièce et atteindre l'ascenseur de l'autre côté de la porte.

Sachez que le cube et le joueur ont une masse, que le gros bouton près de la porte est sensible au poids, et que le champ de force ne détruit que les objets non autorisés (comme les cubes) mais pas les joueurs.

De plus, une salle de synchronisation a été ajoutée derrière la première porte. C'est la suivante qui donne accès à l'ascenseur. Cela permet d'éviter le sacrifice de l'un des joueurs et de vérifier qu'il ne reste pas sur le gros bouton pour laisser les joueurs quitter la zone de test.

Serez-vous capable de résoudre le puzzle et d'atteindre l'ascenseur ?

🎮 Contrôle

  • Pour se déplacer, flèches directionnelles ◀🔼🔽▶

  • Souris + clic gauche pour déplacer le curseur. 🖱

  • Touche B pour interagir / saisir un objet

  • Touche N pour libérer l'objet

  • Touche C pour envoyer un message d'aide à transmettre

  • Touche V pour envoyer un message "regardez vers"

🎬 Démonstration

La version ci-dessous est une version jouable directement sur ce site. Si vous êtes seul à jouer, il suffit d'ouvrir deux onglets cette même page.

🤝 Choix du type de co-manipulation

Pour l'objet à manipuler, j'ai choisi de conserver l'exemple qui a été fourni au début du projet avec un cube. Je l'ai ensuite remplacé par un modèle 3D.

Pour pouvoir co-manipuler le cube, je l'ai contraint avec une notion de poids. Chaque utilisateur dispose d'un outil, un générateur anti-gravité, lui permettant de retirer une certaine quantité de masse du cube afin de le soulever. Bien sûr, plus ils ont d'outils pour manipuler le cube, plus il peut être soulevé haut.

Tous les utilisateurs peuvent effectuer les mêmes actions sur le cube. La moyenne de leurs actions est calculée pour positionner le cube dans l'espace et additionnée pour la rotation de l'objet.

👀 Sensibilisation à l'interaction

L'utilisateur peut interagir sur les objets de l'environnement à l'aide de son curseur. Une zone d'interaction est mise en évidence lorsque le curseur se trouve à l'intérieur. Elle est de couleur bleue pour indiquer que l'utilisateur la survole et orange lorsqu'il interagit avec elle. De plus, une fenêtre contextuelle apparaît en bas de l'écran pour indiquer l'action à effectuer pour interagir avec l'objet.

Par exemple, pour le bouton situé dans la pièce, lorsque vous approchez le curseur en haut du bouton, une sphère bleue apparaît avec un message indiquant que pour interagir avec elle, vous devez appuyer sur la touche "B". De même pour manipuler le cube via une de ses interfaces sur chacune de ses faces ("B" pour attraper et "N" pour relâcher).

Pour bien faire comprendre que l'objet est trop lourd, j'ai choisi qu'une fois qu'il a atteint une certaine hauteur, le cube se met à vibrer pour simuler le fait que le générateur antigravitationnel ne peut plus le soulever. Si l'utilisateur persiste, l'interface sur laquelle il interagit s'éloigne du cube et se met hors de sa portée. Le cube retrouve les effets de la gravité et retombe au sol. L'utilisateur est alors obligé d'appeler un autre utilisateur à l'aide.

📣 Envoi d'un message d'aide

Pour envoyer un message d'aide, vous pouvez à tout moment envoyer des messages iconiques dans l'environnement virtuel. Dans cette version, deux icônes sont présentes :

Permet à l'autre utilisateur de manipuler le cube également. Peut être envoyé en appuyant sur la touche "C".

Permet d'indiquer à l'autre utilisateur une zone particulière à visualiser. Peut être envoyé en appuyant sur la touche "V".

Une fois envoyé, l'icône pointera dans la direction de l'outil et s'arrêtera au premier obstacle solide. De plus, l'icône prendra la couleur de l'utilisateur qui l'a envoyée pour indiquer aux autres l'expéditeur du message.

Cette couleur est attribuée automatiquement au début du jeu et est appliquée à l'outil et au curseur.

🧭 Salle de test

En jouant avec un cube lors de la conception du projet, il m'a rappelé un jeu vidéo spécifique édité par Valve appelé Portal. Il s'agit d'un jeu de réflexion où le joueur doit résoudre des énigmes pour se déplacer de pièce en pièce. Souhaitant un jour réaliser un jeu avec Unity et sachant que le sujet du projet était de faire un défi à plusieurs utilisateurs, j'ai décidé d'en faire un peu plus. D'autant plus que la communauté avait créé un nombre incroyable de modèles 3D en accès libre et gratuit.

J'ai donc décidé d'ajouter des modèles 3D et des textures pour améliorer l'immersion et l'interaction. En effet, lorsque j'ai testé le niveau avec mes amis et ma famille, je me suis rendu compte qu'il était assez fréquent que l'utilisateur perde son curseur. Donc, pour éviter de forcer le curseur à sortir du champ de vision, j'ai décidé d'ajouter un modèle de générateur 3D qui fixe le curseur. De cette façon, l'utilisateur sait où se trouve son curseur en regardant son outil.