Chargement et écran de lancement
Votre visiteur attend une fois, au début. Ce qu'il attend, lui, est un choix que vous faites, et c'est le plus gros levier sur la sensation que donne l'ouverture de votre expérience.
Trois façons pour une ressource d'arriver
| Ce qui se passe | Bon pour | |
|---|---|---|
| Préchargée | récupérée avant l'ouverture de la scène ; l'écran de lancement l'attend | tout ce qui est visible dans les premières secondes |
| Différée | la scène s'ouvre sans elle ; elle apparaît quand elle arrive | du contenu plus loin dans l'expérience |
| En flux | joué directement depuis le réseau, jamais récupéré en entier | la vidéo et l'audio |
Seuls la vidéo et l'audio peuvent commencer à jouer avant d'être entièrement arrivés. Un modèle, une texture ou une police doivent arriver complets avant qu'on puisse s'en servir ; différer signifie seulement que la scène s'ouvre sans attendre, et que la ressource apparaît lorsqu'elle est prête.
Le défaut du projet, et les exceptions par ressource
Le réglage de projet Preload est le défaut pour tout. Chaque ressource peut ensuite le surcharger :
| La ressource dit | Résultat |
|---|---|
| preload on | toujours attendue, quoi que dise le projet |
| preload off | toujours différée |
| inherit | suit le projet |
Les nouvelles ressources démarrent raisonnablement : la vidéo et l'audio sont en flux par défaut — attendre une vidéo entière avant d'ouvrir la scène n'apporte rien — et tout le reste suit le projet.
Deux objets partageant un fichier ne peuvent plus être en désaccord sur sa façon de charger. Réglez-le une fois, sur le fichier.
Une recette pratique
Pour la plupart des projets :
- Précharger les modèles de la première scène, ses textures et toute police affichée immédiatement.
- Différer tout ce qui appartient aux scènes suivantes.
- Diffuser en flux toute la vidéo et tout l'audio, ce qui est déjà le défaut.
Le résultat : une courte attente, suivie d'une expérience qui ne bloque plus jamais.
L'écran de lancement
Avant que le monde existe, deux écrans peuvent apparaître : celui que le visiteur touche pour commencer, et celui qui se remplit pendant que les ressources arrivent.
Les deux se configurent dans les réglages du projet — fond, logo, bouton de démarrage et son libellé, les messages d'accueil, le style du loader.
Les navigateurs refusent de jouer de l'audio tant que le visiteur n'a pas interagi avec la page. Les permissions AR fonctionnent pareil : elles sont accordées à l'intérieur du toucher qui les a demandées. Sans bouton à presser, votre premier son ne se joue pas en silence et la demande de caméra peut ne jamais apparaître.
Le remplacer par le vôtre
L'écran intégré est un préréglage. S'il vous faut le vôtre, un script de lancement prend entièrement en charge les deux écrans — et, fait inhabituel, il déclare aussi son propre panneau de réglages : celui qui l'utilise obtient des champs à remplir plutôt que du code à modifier.
init((ctx: PreloadContext) => {
// Déclare le panneau. Tourne avant tout dessin — déclarez seulement, ne dessinez jamais.
ctx.on('describe', (p) => {
p.section('look', { en: 'Look' });
p.color('tint', { label: { en: 'Background' }, default: '#101014', section: 'look' });
p.text('caption', { label: { en: 'Caption' }, default: '', localized: true, section: 'look' });
p.boolean('hideWhenReady', { label: { en: 'Hide when ready' }, default: true });
});
ctx.on('launch', () => {
/* l'écran qu'ils touchent pour commencer */
});
ctx.on('loading', () => {
/* l'écran qui se remplit */
});
ctx.on('progress', ({ loaded, total, percent }) => {
/* mettez à jour votre propre barre */
});
ctx.on('ready', () => {
/* tout est arrivé */
});
});
| Événement | Se déclenche quand |
|---|---|
describe | le panneau est en construction — dans le runtime comme dans l'éditeur |
start | le runtime démarre |
launch | il faut afficher l'écran que le visiteur touche |
loading | il faut afficher l'écran qui se remplit |
progress | des ressources arrivent — loaded, total, percent |
ready | tout le nécessaire est arrivé |
error | quelque chose s'est mal passé |
Les paramètres peuvent être localisés, donc un seul script de lancement sert toutes les langues que votre projet propose.
Ce qui déclenche le début doit être appelé depuis le gestionnaire de clic du bouton lui-même. Les permissions — orientation de l'appareil, caméra — ne sont accordées qu'à l'intérieur du geste qui les a demandées, et un démarrage reporté à l'image suivante perd ce droit.
S'il lève une erreur, le runtime abandonne le préréglage et affiche l'écran intégré à la place.
Ce qui n'attend pas
La physique n'est pas téléchargée du tout tant qu'une scène n'en a pas besoin, et la disposition des objets instanciés et des particules est générée plutôt que transférée. Les deux sont traités dans pourquoi ce moteur — ils participent de la même idée : ne pas faire attendre les gens pour ce dont ils n'ont pas besoin.
Suite : Les paquets partagés