Données cartographiques vectorisées, extrudées et spatialisées.
Ou le pipeline GeoJSON, D3.js vers Three.js. Cela fait un moment que nous n'avions pas fait de projet Three.js ! Nous jouons surtout avec Unity, mais c'est toujours agréable de revenir…
Nous avons récemment relevé le défi de créer un jeu VR (sous NDA, donc on ne peut ni nommer le jeu ni fournir de captures d'écran ou de code) pour le…

Nous avons récemment relevé le défi de créer un jeu VR (sous NDA, donc on ne peut ni nommer le jeu ni fournir de captures d’écran ou de code) pour le HTC Vive (Steam VR) et le Gear VR (Oculus – Samsung Galaxy). Dans cet article, nous allons présenter les deux casques, le défi qu’ils représentent d’un point de vue game design, ainsi que quelques retours d’expérience de développeur !
En excluant le Cardboard, Gear et Vive sont sans doute les deux casques VR les plus différents du marché actuel :
Le Vive est conçu pour être utilisé sur un ordinateur puissant à 90 FPS, avec 2 manettes de mouvement additionnelles, chacune dotée de plusieurs boutons, le tout dans une expérience en room-scale d’au moins 1,5 m x 2 m, idéalement 3 m x 3 m.
Le Gear fonctionne sur un smartphone Samsung haut de gamme, sans aucune manette, et ne détecte pas la position du joueur dans l’espace, seulement la rotation de la tête ; côté contrôle, le Gear détecte le swipe, un clic et un bouton retour, plutôt limité comparé aux possibilités du Vive.
Nous avons choisi Unity comme moteur pour ce projet, ayant déjà pas mal d’expérience avec lui, et le Gear comme le Vive disposent d’un SDK pour Unity. L’objectif était d’offrir la meilleure expérience possible pour chacun des appareils : que l’utilisateur Vive puisse se déplacer dans l’espace grâce au room-scale et pointer les objets avec ses manettes, tandis que l’utilisateur Gear ne se sente restreint d’aucune façon dans le gameplay.
La première chose à noter est que développer pour le Vive est en fait assez simple, car Steam fournit un SDK très facile d’accès, avec des prefabs complets et plusieurs façons de récupérer les entrées des manettes qui s’intègrent très bien dans la logique de développement Unity. Le développement sur Gear est également très simple sous Unity, car de nombreuses fonctionnalités du Gear sont désormais intégrées nativement.
private SteamVR_TrackedObject trackedObject;
private SteamVR_Controller.Device device;
void Start () {
trackedObject = transform.parent.GetComponent<SteamVR_TrackedObject>();
}
void Update() {
device = SteamVR_Controller.Input((int)trackedObject.index);
if (device.GetPressDown(SteamVR_Controller.ButtonMask.Trigger))
{
shoot();
}
}
void Update () {
if (Input.GetButtonDown("Fire1")) // get Gear Click
{
shoot();
}
}
Le jeu qui nous était commandé était un jeu de tir à la première personne, orienté score, avec plusieurs spots de tir et des vagues d’ennemis, le genre de choses qu’on trouve dans un jeu d’arcade.
Pour gérer les différences de déplacement, nous avons d’abord travaillé sur l’appareil le moins restrictif (le Vive) puis porté le tout sur Gear, car en fin de compte l’utilisateur Gear pourrait être un joueur Vive qui ne bouge jamais du centre de sa pièce. Dans ce scénario, les ennemis réagissent au joueur selon 2 perspectives : ils réagissent par rapport à la position du centre de la pièce lorsqu’il s’agit de s’approcher du joueur, etc., et par rapport à la position du joueur lorsqu’il s’agit de le viser ou de foncer sur lui. Cela nous donne de bonnes réactions ennemies envers le joueur, aussi bien sur Vive que sur Gear. La particularité, dans un contexte Gear, est qu’il n’y a aucune différence entre le centre de la pièce et la position du joueur.
Pour la visée, nous avons décidé de donner au joueur 2 dispositifs de tir : dans un contexte Vive, ils se déplacent avec la manette Vive et tirent dans la direction pointée par la manette, ce qui donne aux joueurs la possibilité de viser 2 ennemis en même temps, mais les joueurs Vive doivent composer avec un temps de rechargement assez long, donc chaque tir doit compter.
L’utilisateur Gear dispose lui aussi de deux dispositifs de tir, mais tous deux sont fixés à la caméra et visent là où le joueur regarde, tirant avec l’un ou l’autre quand le joueur clique ; l’utilisateur Gear ne peut donc pas viser plusieurs ennemis à la fois et doit regarder là où il veut tirer, mais nous lui avons donné un temps de rechargement bien plus rapide (x4), lui offrant beaucoup plus de puissance de feu par seconde pour compenser le manque de facilité de visée.
Le jeu comporte donc un niveau avec différents spots de tir et vagues d’ennemis.
Au démarrage du jeu sur PC, un prefab Vive contenant la caméra Vive, les éléments d’UI, les dispositifs de tir et les dimensions de la pièce est instancié au premier spot de tir.
Au démarrage du jeu sur Samsung, un prefab Gear contenant les caméras Gear, les éléments d’UI, 2 dispositifs de tir bien plus rapides qui y sont fixés, et une pièce de dimensions 0m x 0m est instancié au premier spot de tir.
Les vagues d’ennemis réagissent à la fois à la position de la pièce et à celle du joueur, qui se trouvent être identiques sur Gear ; une fois toutes les vagues du premier spot terminées, le joueur et sa pièce sont téléportés au spot suivant jusqu’à la fin du jeu.
Développer d’abord sur Gear peut sembler tentant, en effet le Gear a moins de puissance GPU, moins d’interactions et toutes sont disponibles sur le Vive, mais développer pour le Gear est un peu plus compliqué à cause de la nécessité de builds Android, et on peut facilement oublier qu’une bonne expérience Vive nécessite de l’espace pour bouger et une bonne intégration des manettes. Elles sont généralement complètement zappées sur de nombreux jeux développés pour Oculus puis portés sur le Vive, quand ce n’est pas pire : dans certains jeux comme InCell, le room-scale permet simplement au joueur de sortir de la zone de jeu en marchant !
Une bonne approche consiste donc à développer d’abord pour le Vive, pour un temps de test rapide et une expérience complète (en gardant à l’esprit les performances pour le Gear), en se posant la question : est-ce que mon jeu fonctionne encore / reste amusant si je ne me déplace pas ?
Des interactions complexes avec la manette Vive sont également à exclure, ou doivent avoir une alternative bien plus simple pour l’utilisateur Gear (un clic ou un swipe).
Pour conclure, créer un petit jeu sur Vive et Gear est assez simple, mais le développeur doit être conscient de toutes les limitations de la VR (mal des transports, etc.), et si presque toutes les fonctionnalités du Gear peuvent être portées sur Vive, l’inverse n’est pas vrai, puisque le Gear ne peut pas détecter la position du joueur et n’a pas de manettes. Coder pour le scénario le plus complexe (manettes et joueur mobiles, room-scale, etc.) puis simplifier est généralement une bonne approche. Enfin, faire des builds réguliers sur les deux appareils ciblés est nécessaire vu l’énorme écart de puissance entre un ordinateur et un appareil portable.