Durcissement du bureau : les jeux ne restent plus bloqués au chargement
La journée a eu un objectif principal : faire passer l'application de bureau packagée de « s'ouvre » à « s'ouvre et fonctionne ». Les jeux ne deviennent plus noirs, bloqués sur « Chargement du jeu » — grâce à un système d'éclairage de secours ; l'ouverture, la fermeture et la réinitialisation des données ne gèlent plus toute l'interface ; les plugins d'espace réservé non implémentés se cachent gracieusement au lieu de lancer des liens morts ; et une barre d'état d'outil professionnel avec un panneau de journal est arrivée, ainsi qu'une bibliothèque audio de musique et de sons intégrée.
Pousser "ouvre" dans "ouvre et fonctionne"
一个能在浏览器里跑得很好的东西,装进桌面应用后未必同样好用——桌面应用的是操作系统自带的网页引擎,它和主流浏览器在底层能力上有不少差异,很多在浏览器里没问题的"桌面硬化":把打包后的桌面应用从"勉强能打开"逼到"打开就能正常用"。它处理的不是某一个炫目的新功能,而是一长串"在桌面端才会暴露"的可靠性问题——游戏加载死锁、窗口开关冻结、重置炸窗、点不开的死链。这类工作往往吃力不讨好:做好了用户察觉不到,做不好用户第一时间就被劝退。但对一个想让普通人把它装到自己电脑上日常用的产品来说,"桌面端开"Quelque chose qui fonctionne bien dans un navigateur n'est pas nécessairement aussi utilisable une fois intégré dans une application de bureau - une application de bureau utilise le moteur Web intégré du système d'exploitation, qui diffère en termes de fonctionnalités sous-jacentes des navigateurs traditionnels à bien des égards, de sorte que de nombreuses fonctionnalités qui fonctionnent bien dans un navigateur se détériorent de manière inattendue sur le bureau. Cette journée a été consacrée au « durcissement du bureau » : faire passer l'application de bureau packagée de « s'ouvre à peine » à « s'ouvre et fonctionne correctement ». Il ne s'attaque pas à une nouvelle fonctionnalité éblouissante, mais à une longue série de problèmes de fiabilité "uniquement sur le bureau" : blocage du chargement du jeu, blocage de l'ouverture/fermeture de la fenêtre, réinitialisation faisant planter la fenêtre, liens morts que vous ne pouvez pas ouvrir. Un tel travail est souvent ingrat : bien fait, les utilisateurs ne le remarquent pas ; mal fait, les utilisateurs rebondissent immédiatement. Mais pour un produit qui souhaite que les gens ordinaires l'installent sur leur propre ordinateur et l'utilisent quotidiennement, « fonctionne immédiatement sur le bureau » est une porte inévitable. Cette journée consistait à franchir sérieusement cette porte.
Fini le blocage sur "Chargement du jeu" : éclairage de secours pour les scènes
这天最关键的一修,是让游戏在桌面应用里不再黑屏死锁。此前的现象很Nom : "试玩",画面常常一直黑着、永远停在"Chargement jeu ".一种用一张环境图来给整个场景提供真实照明的高级技法;在桌面引擎上,它所依赖的几项底层能力恰好都缺失,于是场景在加载这盏天光时直接卡死,后面什么都跑不起来。这天的解法是给场景设计"兜底"路径:给相机加上一个纯色的天空底色(至少天不是黑的),再加一盏纯色的兜底环境光把场景里的物体均匀照亮——即使享受不到高级天光,场景也能正常、明亮地显示出来。同时让所有样例游戏在检测到这种环境时,自动跳过那盏加载不了的天光,直接走兜底路径。改完之后,这些游戏在桌面应用里都能正常进入、看得见画面了。这背后还有一条好习惯:把这些底层能力的缺口完整地整理成清单,提交给引擎团队,推动从根上补齐,而不是只在自己这边打补丁绕过去。Le La solution clé de la journée consistait à mettre fin à l’impasse de l’écran noir pour les jeux dans l’application de bureau. Le symptôme précédent était rebutant : appuyer sur "play" dans l'application de bureau fournie laissait souvent l'écran noir, toujours bloqué sur "Chargement du jeu". À la racine, le moteur Web du système utilisé par l'application de bureau ne prend pas en charge « l'éclairage du ciel basé sur une carte d'environnement » — une technique avancée qui utilise une image d'environnement pour fournir un éclairage réaliste pour une scène entière ; sur le moteur de bureau, plusieurs fonctionnalités sous-jacentes dont il dépend sont manquantes, donc une scène s'est bloquée lors du chargement de cette lucarne et rien d'autre n'a pu fonctionner. La solution d'aujourd'hui a conçu un chemin de « secours » pour les scènes : donner à la caméra une couleur de base de ciel unie (pour que le ciel au moins ne soit pas noir), plus une lumière ambiante de secours de couleur unie pour éclairer uniformément les objets de la scène — ainsi, même sans éclairage avancé du ciel, une scène s'affiche correctement et avec luminosité. Tous les exemples de jeux, lors de la détection de cet environnement, ignorent automatiquement la lucarne non téléchargeable et empruntent la voie de secours. Après le correctif, ces jeux entrent et s'affichent correctement dans l'application de bureau. Derrière cela se cache une bonne habitude : compiler les lacunes de capacités sous-jacentes dans une liste complète et les classer auprès de l'équipe du moteur pour générer un correctif racine, plutôt que de simplement les contourner de notre propre côté.
L'ouverture, la fermeture et la réinitialisation ne se figent plus : durcissement du cycle de vie
"生命周期"。桌面应用不只是一个窗口,它背后还连着一整套本地后端服务,而"窗口开/ 窗口关 /数据重置"这些时刻,正是各种可靠性问题最容易爆发的地方。改进有几条:让桌面应用自己接管整套后端的生命周期——开窗时干净地重启服务、关窗时彻底地拆除,不再留下一堆游离的后台进程占着资源。一批"重置之后整个界面就"的坑被填平:清空会话、重置游戏这类批量删除操作,改成了异步且有边界的方式,不再因为一次性同步删大量数据而把界面冻住,也不再连带把窗口一起杀掉,重置完窗口和设置都能优雅地恢复。后台还立起了一套看护机制:自动监护并在必要时重启关键的边车进程、在退出时干净地回收它们、并用健康检查门控启动;再配上层的异常兜底和一个修好的、不再泄漏的心跳机制。这些改动单看都很底层,但合起来决定了一件事 : day a également systématiquement renforcé le « cycle de vie » de l’application de bureau. Une application de bureau n'est pas seulement une fenêtre : derrière elle se trouve tout un ensemble de services backend locaux, et les moments « ouverture de fenêtre/fermeture de fenêtre/réinitialisation des données » sont exactement ceux où les problèmes de fiabilité éclatent le plus. Plusieurs améliorations : le fait que l'application de bureau soit propriétaire de l'ensemble du cycle de vie du backend – redémarrage propre des services à l'ouverture et suppression complète de ceux-ci à la fermeture, ne laissant aucune pile de processus d'arrière-plan parasites monopolisant les ressources. Un lot de problèmes de type "réinitialisation et toute l'interface explose" a été corrigé : les opérations de suppression groupée telles que l'effacement des sessions et la réinitialisation des jeux sont devenues asynchrones et limitées, ne gelant plus l'interface en supprimant de manière synchrone une masse de données à la fois, ni en supprimant la fenêtre avec elle, la fenêtre et les paramètres étant récupérés gracieusement après une réinitialisation. Un système de supervision a été mis en place en arrière-plan : il surveille et, si nécessaire, redémarre les processus secondaires clés, les récolte proprement à la sortie et contrôle le démarrage lors des contrôles de santé ; plus un backstop d'exception de niveau supérieur et un rythme cardiaque fixe et sans fuite. Individuellement de bas niveau, ces éléments décident ensemble d'une chose : si vous pouvez garder cette application de bureau ouverte en toute confiance toute la journée sans qu'elle ne plante, ne se bloque ou ne laisse des dégâts.
Les plugins d'espace réservé se cachent gracieusement : affichent uniquement ce qui est implémenté
La description de la situation est la suivante : 404死链。原因是商店里有几个还只是占位、尚未实现的工作台插件,一点就报错。这天把它们统一标记为隐藏——让所有工作台插件"实现了才出现"的优雅降级:没做好的东西,干脆不展示,而不是展示一个点了就坏的入口。与此同时还修了一个更深的根因:在开发环境下,插件的构建产物有时会损坏或缺失,导致它即便是已实现的插件也加载不出来;这天给这种情况加了自愈—— 404. "Ceci La journée a également éliminé une classe de maladresse de première impression : ouvrir un plugin Workbench uniquement pour obtenir un lien mort 404. La cause était plusieurs plugins d'atelier non implémentés dans le magasin qui n'auraient pas dû apparaître avant que les utilisateurs ne soient encore affichés comme des plugins normaux, erreur au clic. Cette journée les a marqués uniformément comme masqués - plaçant tous les plugins du Workbench dans une dégradation gracieuse « n'apparaît qu'une fois implémentée » : ce qui n'est pas prêt n'est tout simplement pas affiché, plutôt que d'afficher une entrée qui se brise au clic. Entre-temps, une cause profonde plus profonde a été corrigée : dans l'environnement de développement, la sortie de construction d'un plugin peut parfois être cassée ou manquante, de sorte que même un plugin implémenté ne parvient pas à se charger ; ce jour a ajouté l'auto-guérison pour cela - en trouvant la sortie cassée ou absente, elle se reconstruit automatiquement, éliminant cette classe de 404 à la source. Chaque entrée exposée par un produit est une promesse ; masquer les entrées « cassures au clic » et réparer automatiquement la sortie cassée maintient la confiance de base selon laquelle « tout ce que vous pouvez voir, vous pouvez l'utiliser ».
Une barre d'état d'outil professionnel + un panneau de journal + une bibliothèque audio
这天还给界面增添了两样很实用的东西.一条专业工具风格的状态栏 :界面右侧有一个健康指示器,一眼就能看出系统当前状态正不正常;出严重问题时会弹出醒目的横幅;还有一个可停靠的信息日志面板,把运行过程中的日志收集起来,支持点击即复制、重复条目自动折叠,并把控制台和网络面板也接了进来。对一个复杂的创作工"具来说,"非常关键——这条状态栏就是把系统的健康状况和运行细节,从藏在后台变成了摆在眼前。其二是新增了一个音频库工作台:内置了音乐与音效素材库,并接入了语音与音乐的合成能力。一个游戏没有声音总像缺了一半灵魂,而很多创作者既不懂作曲、也没有现成的音效;有了这个库,给游戏"要去别处找"变成了"在工具里就能拿"。Ceci day a également ajouté deux éléments pratiques à l'interface. L'une est une barre d'état de type outil professionnel : un indicateur de santé sur la droite indique en un coup d'œil si l'état actuel du système est sain ; une bannière bien visible apparaît sur des problèmes graves ; et un panneau de journal d'informations ancrable collecte les journaux d'exécution, prenant en charge le clic pour copier et le pliage automatique des entrées répétées, avec des panneaux de console et de réseau également câblés. Pour un outil de création complexe, « pouvez-vous voir et voir clairement un problème au moment où il se produit » est crucial : cette barre d'état déplace les détails de l'état de santé et de l'exécution du système de cachés en arrière-plan vers juste devant vos yeux. L'autre est un nouvel atelier de bibliothèque audio : une bibliothèque intégrée de musique et d'effets sonores ainsi qu'une synthèse vocale et musicale. Un jeu sans son semble toujours à court d’âme, et de nombreux créateurs ne composent ni n’ont d’effets sonores prêts ; avec cette bibliothèque, la composition de la musique de fond d'un jeu, l'ajout de sons à succès et la voix des personnages vont de « aller le trouver ailleurs » à « l'obtenir directement dans l'outil ».
Ce que signifie cette journée
Il s'agit d'un système de gestion des ressources humaines, d'un système de gestion des ressources humaines et d'un système de gestion des ressources humaines.真实的使用形态下站得住。一个能在开发者浏览器里跑得很好的东西,和一个能被普通人装进自己电脑,双击就能用一整天而不崩的产品,中间隔着的正是这一天所做的全部——兜底、硬化、自愈、优雅降级。这些工作有一个共同的气质:它们都是在为"信任"打底。游戏能正常加载,人才敢做;窗口不冻死,人才敢一直开着;看得见的入口都能用,人才不会被劝退;出问题能看到、声音随手能加,人才用得安心、用得尽兴。把一个东西从"演示能跑"做到"真实能用",从来都是最不显山露水、却Il s'agit de le jour n’a donné naissance à aucune nouvelle capacité éblouissante ; il a fait quelque chose de plus simple et de plus crucial : faire en sorte que le produit résiste dans sa forme réelle d'utilisation. Entre quelque chose qui fonctionne très bien dans le navigateur d'un développeur et un produit qu'une personne ordinaire peut installer sur son propre ordinateur et double-cliquer pour l'utiliser toute la journée sans planter se trouve exactement tout ce qui est fait aujourd'hui : solutions de secours, durcissement, auto-guérison, dégradation gracieuse. Ceux-ci partagent un même tempérament : ils jettent tous les bases de la « confiance ». Les jeux qui se chargent correctement sont ce qui permet aux gens d'oser construire ; les fenêtres qui ne gèlent pas sont ce qui permet aux gens de les garder ouvertes ; chaque entrée visible qui fonctionne est ce qui empêche les gens de rebondir ; les problèmes d'être visible et le son facile à ajouter sont ce qui permet aux gens de l'utiliser facilement et pleinement. Passer de « la démonstration » à « ça fonctionne vraiment » est toujours le tronçon de route le moins voyant mais le plus révélateur de compétences. Cette journée a poussé l’application de bureau au-delà de ce seuil.