Archives de
Catégorie : Unity3D

Développer sur Gear VR avec Unity 3D – Partie 1 : Bien démarrer

Développer sur Gear VR avec Unity 3D – Partie 1 : Bien démarrer

Créer du contenu en réalité virtuelle avec Unity est aujourd’hui très facile, si vous développez sur Oculus Rift ou Gear VR, c’est une case à cocher dans les paramètres du Player. De là, la caméra principale sera automatiquement mise à jour avec les rotations et la position de la tête. Facile ! Mais dans un projet existant avec du contenu déjà existant, c’est une autre histoire. Effectivement outre l’aspect performance, qui va monopoliser à lui seul pas mal de temps, il y a effectivement plusieurs choses à savoir afin de proposer au joueur une expérience digne de ce nom.

M.A.R.S. Extraction VR sur PC
M.A.R.S. Extraction VR sur PC

Je travail actuellement sur M.A.R.S. Extraction, un jeu de tir à 6 degrés de liberté, comme Descent ou Forsaken pour les connaisseurs ! Il est actuellement disponible sur plusieurs plateformes, dont très bientôt, pour Gear VR. Il m’est arrivé tellement de choses durant le développement (et ce n’est d’ailleurs pas terminé !) qu’un retour d’expérience s’imposait afin d’en faire profiter à tout ceux qui veulent se lancer dans cette aventure. Nous allons donc parler du Gear VR et du monde merveilleux du développement mobile sur Android avec le moteur Unity 3D.

Le Gear VR c’est quoi ?

07936153-photo-gear-vr-galaxy-s6

Le Gear VR est un casque de réalité virtuelle mobile créé par Samsung et Oculus. Il y a deux grandes différences entre ce casque et un autre de type Cardboard. Le Gear VR n’est pas qu’un bout de plastique haut de gamme, il embarque des capteurs (Gyroscope, Accéléromètre et Compas). Les calculs relatifs au Head Tracking sont réalisés grâce au casque et plus grâce au téléphone, permettant d’alléger la charge CPU du mobile. Mais ce n’est pas tout, le casque dispose aussi d’un pad tactile sur la droite (très perfectible), permettant de se balader dans les menus et de valider des actions. L’utilisateur final n’est pas obligé d’avoir un gamepad et c’est un gros plus car la majorité des gens n’en ont pas.

Enfin, la partie Software est assurée par Oculus, on retrouve ainsi un dashboard VR dédié quand le téléphone est enfoncé dans le casque (et connecté via USB). L’immersion VR est impressionnante, les jeux se lancent directement depuis cet espace. Il n’est pas nécessaire d’enlever le casque pour passer d’une application à une autre, tout est parfaitement intégré. C’est d’ailleurs grâce à ce dernier point que le Gear VR est vraiment un casque VR mobile grand public !

Le point le plus bloquant est qu’il est réservé au possesseurs de Samsung Galaxy S6, S6 Edge, Note 5 et les futurs hauts de gamme de la marque. Cette fermeture permet aux développeurs de travailler sur du matériel homogène (les tailles d’écran changent juste).

Première étape : Unity

Suite à cette petite présentation, je vous propose de lancer Unity et de créer un nouveau projet 3D. Allez dans les préférences du Player File / Build Settings… / Player Settings, puis dans Other Settings afin d’y cocher la case magique Virtual Reality Supported.

othersettingsRien qu’avec cette manipulation, votre projet devient compatible avec les casques suivants

  • Samsung Gear VR
  • Oculus Rift DK2 et CV1
  • Playstation VR
  • SteamVR (bientôt)

Désormais, lorsqu’un casque VR supporté sera détecté, la caméra avec le tag Main Camera sera surchargée. Le composant Transform sera mis à jour avec les données relatives à la position et à la rotation de la tête du joueur. Cela peut poser des problèmes dans le sens où vous ne pouvez pas changer les valeurs de ce composant, vous pourrez toujours essayer, mais Unity reprendra la main. Il faudra donc créer un GameObject parent à la caméra.

Vous pouvez créer une scène basique avec un sol, et une caméra ayant le tag MainCamera (c’est le cas par défaut). Passer votre build target sur Android et vous êtes presque prêt à….

Déployer sur son téléphone

Si vous déployez votre projet sur votre téléphone maintenant, ça fonctionnera presque, d’ailleurs vous pouvez noter que quand l’application est lancée, un message indique qu’il faut placer le téléphone dans le Gear VR pour aller plus loin. Cependant, vous aurez très vite un message d’erreur vous indiquant que vous ne pouvez pas aller plus loin car cette application n’est pas valide.

Et oui les amis, afin de limiter la distribution de contenu, Oculus et Samsung ont eux une super bonne idée© : Bloquer les APK qui ne sont pas distribués depuis le store. Mais alors comment tester son travail ? Rassurez vous, il suffit d’aller sur le site d’Oculus et de générer un fichier spécifique, l’Oculus Signature File ou OSIG pour les intimes 😉

Rendez vous ici avec le numéro de série de votre téléphone, une fois entré dans le formulaire vous pourrez télécharger un fichier qui devra être placé pour tout vos projets Gear VR, dans le dossier Assets/Plugins/android/assets/.

Cependant, lorsque vous aller créer une version de production à destination de l’Oculus Store, il faudra supprimer ce fichier. A partir de maintenant vous pouvez déployer sur votre mobile, et magie, ça fonctionne !

Un mot sur le SDK Oculus Mobile

Le SDK mobile est requis pour déployer une application sur le l’Oculus Store, par chance Unity embarque déjà presque tout ce qu’il faut. Vous n’avez qu’à le télécharger et l’importer dans votre projet.

ovrsdk

Je vous rassure encore une fois, trois quart du package n’est pas nécessaire et peut être supprimé sans problème !  Voici les fichiers que j’ai conservé. D’ailleurs OVRTouchPad n’est pas nécessaire non plus (c’est une version custom dans mon projet).

Au niveau du dossier Plugins, c’est pareil, vous n’avez besoin que de libOculusMediaSurface.so, il se trouve dans Assets/Plugins/android.

Et à quoi ça sert tout ça ?

Le SDK mobile permet d’utiliser deux fonctions permettant de modifier les fréquences du CPU et du GPU. C’est très efficace pour donner un coup de boost sur les scène un peu chargées ! Evidemment, si vous en arrivez là, c’est que votre contenu affiché à l’écran est gros (c’est mon cas) et avant d’utiliser ces fonctions je vous recommande vraiment de faire de l’optimisation car augmenter les fréquences du CPU et du GPU vont faire chauffer le téléphone ce qui provoquera à la longue, une erreur de surchauffe. Gardez bien ça en tête.

// 0 est la valeur par défaut, 3 est la valeur maximum
OVRPlugin.gpuLevel = value;

// Idem
OVRPlugin.cpuLevel = value;

Pour plus d’informations sur ces deux fonctions, je vous recommande la lecture de cet article.

Les paramètres de qualité

La première chose à faire est de ne pas utiliser d’antialiasing. Oui cela fait partie des choses à à éviter sur Android.

qualitysettings

Cependant, si votre contenu n’est pas trop gros, vous pouvez passer en 2x Multi-Sampling, mais n’allez pas au delà, c’est un conseil !

De même il s’avère que le paramètre de qualité Simple soit suffisant pour garder un bon rapport entre qualité et performance. Vous pouvez descendre plus bas pour gagner un peu, mais si vous devez le faire, c’est que vous avez probablement un problème ailleurs. Utiliser une valeur plus importante que Good est une cependant une très mauvaise idée.

 Pour finir

Cette première partie est terminée, il va nous rester deux grandes choses à voir, l’optimisation des performances, que ce soit en amont avec vos assets ou dans l’éditeurs, il y a de quoi faire. Enfin nous parlerons du déploiement sur l’Oculus Store. Mais n’ayez crainte ! nous verrons tout ça prochainement, vous permettant de devenir comme votre serviteur, un véritable VR-chitect =D (Prononcé Vi Are Kitect – Architecte de la réalité virtuelle)

Unity 3D est disponible en preview pour Linux

Unity 3D est disponible en preview pour Linux

Cela faisait déjà quelques temps que des rumeurs circulaient autour d’un éventuel port de l’éditeur d’Unity pour les systèmes Linux. Après une première phase de test privé, voilà que le dit éditeur est proposé en version preview pour tout le monde. C’est une très bonne nouvelle, cependant il faut tout de même faire attention car cette version preview va servir à l’équipe chargée du port de l’éditeur de vérifier qu’il est possible de livrer une version Linux de l’éditeur en même temps que les versions Windows et Mac.

Today’s build is what we call an experimental build; future support is not yet guaranteed.

Si les retours ne sont pas concluants et si le travail nécessaire est trop important, il est possible que l’éditeur ne voient jamais le jour en version stable sur nos systèmes. N’hésitez donc pas dès aujourd’hui à tester, utiliser et surtout remonter un maximum de bugs.

Unity sous Linux avec une scène standard en 3D
Unity sous Linux avec une scène standard en 3D

Lire la suite Lire la suite

Créer un jeu multi-joueur avec Unity 4.x – Partie 1

Créer un jeu multi-joueur avec Unity 4.x – Partie 1

Si il y a une fonctionnalité qui fait rêver un tas de développeurs de jeux vidéo, c’est bien l’aspect multi-joueur ! Cependant cette partie du développement n’est pas la chose la plus simple à appréhender, surtout lorsque l’on commence à créer des jeux. Heureusement Unity propose par défaut un module réseau assez bien fait, qui une fois prst en main se révèle assez facile à utiliser. Aujourd’hui nous allons voir comment créer un petit jeu multi-joueur basique avec Unity 4.x*, ce tutoriel sera par ailleurs découpé en plusieurs parties.

* il y a des changements dans la version 5.x, je mettrais à jour ou referais un article au besoin.

Pour cette première partie nous utiliserons la GUI d’Unity 4.4 et pas celle de la version 4.6 car nous voulons aller vite, cependant dans la dernière partie du tutoriel, je vous montrerai comment réaliser un menu complet avec ce nouveau module !

Lire la suite Lire la suite

Déploiement Unity vers tablette Windows 8 : Le guide

Déploiement Unity vers tablette Windows 8 : Le guide

Le moteur Unity permet de déployer relativement facilement sur desktop et mobile, cependant sur les plateformes mobiles, il y a parfois des subtilités à prendre en compte. Par exemple si vous voulez déployer sur Windows Phone, il faudra générer la solution Visual Studio depuis Unity, puis ouvrir cette dernière pour déployer votre jeu sur un téléphone, il faudra évidement configurer la solution correctement (nom d’assembly, vignettes, etc..). C’est presque la même chose avec les applications « Modernes » pour Windows 8, à l’exception que le déploiement sur autre chose que votre propre PC est… différent. Effectivement, vous ne pouvez pas brancher votre tablette à votre PC et demander à Visual Studio de déployer dessus. Il va falloir faire du déploiement et du débogage à distance via le réseau : Le remote debugging.

Lire la suite Lire la suite

Gérer plusieurs langues dans votre jeu avec Unity 3D

Gérer plusieurs langues dans votre jeu avec Unity 3D

Lorsque l’on créé un jeu il arrive le moment où il faut ajouter une interface graphique avec inévitablement du texte. Là vous avez trois cas de figure. Le premier cas que l’on retrouve très souvent est un jeu totalement en Anglais car c’est une langue très utilisée à travers le monde, dans ce cas il n’y a pas trop à se poser de questions. Il arrive aussi que le développeur choisisse d’utiliser sa langue maternelle, c’est une bonne idée au début car la diffusion pour l’entourage est facile, cependant le diffusion à l’international est plus compliquée. Enfin le dernier cas est le jeu avec plusieurs langues prisent en charge, et là ça se complique un peu car il est préférable de penser à cette étape au début du développement, histoire de ne pas avoir 50 fichiers à modifier par la suite. Je vous propose de réaliser un système de gestion des langues fonctionnel avec Unity, vous pouvez le modifier pour l’utiliser avec n’importe quel autre moteur. Dans ce tutoriel nous aurons besoin de deux scripts externes. SimpleJSON dans sa version la plus light (sans SharpZipLib) qui va nous permettre de lire le contenu des fichiers de langages. La classe Singleton<T> qui permet d’avoir un composant statique sur tout le projet. Pour ma part, j’ai placé ces deux scripts dans un dossier Utils. Nous commencerons par créer la classe Lang, elle devra hériter de Singleton. Les fichiers de traduction seront stockés dans le dossier Resources, que vous devez impérativement créer, ils seront au format json (car nous sommes des gens bien).

Lire la suite Lire la suite

Charger vos niveaux avec des paramètres dans Unity3D

Charger vos niveaux avec des paramètres dans Unity3D

Unity3D est peut être un fantastique outil, il n’en reste pas moins perfectible sur certains points et l’une des choses qui peut paraître banale mais qui n’est pas évidente est de charger une scène avec des paramètres ! Alors par défaut ce n’est pas possible car la méthode LoadLevel(string sceneName) ne prend pas de paramètre (#stress) mais on peut palier à ce problème vraiment très facilement en créant un gestionnaire de scène. Il y a deux méthodes, soit on créé un script dérivant de MonoBehavior et on place un DontDestroyOnLoad dans la méthode Start(), soit on créé une classe statique. Je vais opter pour la deuxième solution qui est à mon sens beaucoup plus adaptée, car effectivement il n’est pas nécessaire d’ajouter ce gestionnaire sur un GameObject de la scène, on y accédera depuis n’importe quel fichier facilement.

Lire la suite Lire la suite