lundi 30 mai 2016

Myrne: The Quest - Les mobs sont passés chez l'opticien


Salut les lecteurs !

Vous avez vu ? Je tiens le rythme de publication^^

Ouep, se désabonne de ce sale spammeur de Beldarak

Heu.... Bon, pas grand chose d'accompli ce weekend (ce qui est le principe du weekend, d'ailleurs) vu que j'ai principalement corrigé des bugs.

Mes dalles de pression, utilisées dans les puzzles où il faut poser certains objets dessus déconnaient quand on ramassait l'objet posé dessus. En gros Unity n'enregistre pas l'arrêt de la collision puisque l'objet ne bouge techniquement pas... en tout cas pas en utilisant le moteur physique (qui est vraiment un truc géré à part sous Unity)... bref, c'est pas simple à expliquer :D

Donc j'ai un peu hacké tout le machin pour que les dalles détectent quand l'objet n'est plus dessus...

Tu as fait d'autres trucs ? Du genre compréhensibles ?

Oui !

J'ai remplacé la manière dont les ennemis "voient" par un truc carrément plus pro et précis. Jusqu'ici ils envoyaient des rayons (ce qu'on appelle du RayCast) en arc de cercle devant eux pour détecter si un ennemi se trouve en ligne de vue.

(l'image de base n'est évidemment pas de moi mais vient de Pokemon^^)
Une image devrait vous parler un peu plus

Le soucis de ce système c'est qu'il est tout pourri... C'est peu précis (plus la distance de vue est grande, plus un ennemi a de chances de se cacher entre deux lignes et ne pas être détecté alors qu'il est juste devant la créature), ça fait pas très pro et puis ça tourne rapidement au cauchemar pour gérer la vision vers le haut et le bas (sans parler du nombre de raycasts qui est pas super niveau performances).

Le nouveau système ressemble plutôt à ça :


C'est beaucoup plus précis et fonctionne fort différemment. Désormais, au lancement d'un niveau, toutes les créatures (y-compris le joueur) s' "enregistrent" dans un script. Tous les x temps (actuellement, une seconde), chaque créature va passer cette liste en revue et voir si par hasard un de ses ennemis ne se trouverait pas dans son cône de vision (avec un calcul).

C'est une technique assez lourde mais je ne pense pas que ça consomme plus que l'ancienne.

C'est tout ?

Oui, à peu près. J'ai aussi entamé la "super fun" tâche d'optimiser l'affichage de la feuille de perso. Cette petite crasse consomme beaucoup, beaucoup trop de ressources (avec chute de fps).

Le soucis c'est que la fonction d'affichage doit aller chercher ses infos partout (les images des objets qu'on a avec leur quantité, les skills, stats et le level, l'équipement, etc...

Ça fait pas mal d'appels à des scripts externes (qui ne font pas partie de la classe qui s'occupe de l'affichage je veux dire) ce qui évidemment n'est pas gratuit.

Je passe mon temps dans le profiler (un outil génial d'Unity qui te dit quels scripts/trucs prennent le plus de mémoire à un instant t) pour trouver les lignes qui posent soucis et entamer le pénible de processus de copier ces données dans le script d'affichage pour qu'il retienne les données (la valeur de la compétence de tir à l'arc par exemple) et surtout de les tenir à jour (en faisant ça proprement pour éviter de perdre des fps ailleurs)... Du fun en barres -_-'