Salut!
Je n'ai aucune connaissance sous unity et je vais peut être dire des bêtises, mais ton projet m'a fait réfléchir avec mes modestes connaissances à comment aborder le problème d'un jeu 2D en 3D!
Je te fais pars de ma réflexion et du système que j'envisagerai en espérant ne pas dire trop de bêtises:
Mon idée est de découper l'affiche (3D) du principe du jeu en lui même (2D).
Pour cela on découpe l'environnement en 3 couches:
-Le plateau de jeu qui est le support des éléments (joueurs, décors etc).
-un plaque de détection sous le plateau qui est une réplique du plateau (vide bien sur) translaté vers le bas.
-une plaque de détection du même genre au dessus du plateau.
Chaque plaque de détection est bien entendu invisible pour le joueur.
1)Chaque élément du plateau possède une sorte de "tige" qui transperce le plateau, et qui envoie un raycast dans le prolongement de la tige soit à la verticale, en direction de la plaque de détection du bas (plaque1).
Lorsque le raycast entre en collision avec cette plaque on récupère les coordonnés et en les convertis en système de cases: (2.23,5.96,4) donnerait comme info que la case (2,5) est occupée par l'élément x qui à envoyé le rayon!
Ainsi tu peux avoir une vision en 2D des cases occupées ou non, ce qui permet de faire facilement les calculs nécessaires sans avoir à t'occuper des colider des différents objets etc..
Si un élément comme une maison prend 2 cases, il comprendra 2 tiges, une pour chaque case occupée.
2) La vue est gérée par la caméra qui envoie des raycasts vers les personnages et éléments à afficher. Le raycast va entrer ou non en collision avec les colliders des éléments de décors si le personne est caché ou non.
Lors de la collision tu récupère la position 2D de l'impact et la compare avec les informations de la plaque 1: si l'impact correspond aux coordonnées du joueurs celui ci est visible. Si non, la plaque 1 t'indique quel objet occupe le plateau à cet endroit et tu peux lui appliquer une texture transparente pour voir le personnage à travers!
3) La souris envoie elle un raycast orienté vers le haut, à la vertical du plateau. Ce raycast entre en collision avec la plaque 2 et te permet de récupérer les coordonnées de la case actuellement survolée.
Tu peux comparer ces données à celles issues de la plaque1 pour savoir si tu dois afficher la case en grisés (non disponible) ou en clair (disponibles pour une action)!
Tu peux enfin transmettre ces informations à la caméra qui va envoyer un ray cast vers la case indiqué pour voir si il existe des obstacles à la vue et leurs apporter un traitement spécifique (rendre transparent un bâtiment) afin de voir la case ciblée!
Découper le jeu ainsi te permet de te concentrer sur la 2D pour ce qui est des calculs et de ne prendre en compte la dimension 3D uniquement que pour l'affichage!
En tout cas si je devais faire un projet comme le tient c'est ainsi que je l'aborderais
Qu'en penses-tu?