[C#] Portails dans Unity !

Questions à propos du scripting. Hors Shader, GUI, Audio et Mobile.
Armelias
Messages : 29
Inscription : 17 Juin 2014 21:30

Re: [C#] Portails dans Unity !

Message par Armelias » 29 Oct 2014 18:41

J'ai regardé toutes ces vidéos. Aucune n'a un rendu "parfait", ou le joueur passe de manière fluide à travers le portail, ou il peut s'y arreter sans être téléporté.
La version indie est bien partie et est celle sur laquelle je me base mais ne va pas assez loin. (en ne traitant pas -entre autre- la phase de transfert du personnage).

Donc oui, j'ai cherché.

Avatar de l’utilisateur
ZJP
Messages : 5748
Inscription : 15 Déc 2009 06:00

Re: [C#] Portails dans Unity !

Message par ZJP » 29 Oct 2014 19:44

Armelias a écrit :J'ai regardé toutes ces vidéos. Aucune n'a un rendu "parfait", ou le joueur passe de manière fluide à travers le portail, ou il peut s'y arreter sans être téléporté.
La version indie est bien partie et est celle sur laquelle je me base mais ne va pas assez loin. (en ne traitant pas -entre autre- la phase de transfert du personnage).

Donc oui, j'ai cherché.
Il n'y a pas de transition fluide à proprement parlé dans la vidéo montrée par rapport aux autres. La caméra est en mode FPS et la vitesse de propulsion du personnage est simplement plus lente car à l'horizontale : pas d'augmentation du à la gravité. La vitesse de sortie est à minima égale à la vitesse d'entrée. Le "player" ne reste pas entre les deux "mondes", il a DÉJÀ franchi le portal. La "saccade" ou secousse lors de la transition entre les mondes est PARFAITEMENT "visible". De plus , l'effet de "pose" attendu ou voulu ou rêvé sur le seuil d'un portail est IMPOSSIBLE a obtenir si le joueur se jette "dans un trou". (*)

Les tutos précédents règlent la question posée : c'est uniquement un souci de point de vu, de vitesse et d'orientation d'un portail par rapport à l'horizon.
Portail = Téléportation. C'est aussi simple que cela. Effet "fluide" si plan horizontal de départ = plan horizontal d'arrivée, vitesse constante et caméra parente du joueur en vue FPS. Difficile de mieux résumer. Mais, je peux,bien sur, me tromper.

http://www.youtube.com/watch?v=dlwY6cc_vOc

(*) Cas particulier :
Les deux mondes sont en réalités dos à dos et le portail est fictif. Juste un trou séparant deux "scènes". Valable bien sur uniquement sur un plan horizontal ou plan ou la gravité est sans conséquence : elle ne "bouge" pas le joueur à l'insu de son plein gré.

Armelias
Messages : 29
Inscription : 17 Juin 2014 21:30

Re: [C#] Portails dans Unity !

Message par Armelias » 29 Oct 2014 21:17

Tout d'abord désolé d'avoir répondu si sèchement, sur le moment je ne m'en suis pas rendu compte.

Ensuite -et désolé pour ça- je ne comprends pas bien ce que tu veux dire.
Dans la vidéo que je vous ai linké (celle de youtube) il y a en effet une saccade et c'est justement ça que j'aimerai éviter. Cette vidéo est le rendu que j'ai chez moi, actuellement.
Ensuite je ne cherche pas à avoir à jouer sur la vitesse, si je tombe de haut à travers un portail je serais propulsé tout ça, je m'en fiche. Ce que je veux obtenir c'est simplement 2 portails horizontaux.

Je suis désolé si je n'ai pas bien saisis ton message :?
Je referais bien une vidéo pour montrer l'effet escompté mais vu le temps d'upload ça va être galère (à la limite j'éditerais ce post tout à l'heure). Mais pour bien comprendre le rendu que j'aimerais avoir au niveau de la transition, il n'y a pas mieux (je crois) que d'aller ici : http://www.kongregate.com/games/heaval/portalizer.
Dès le niveau 1, on peut s'arreter au milieu du portail, comme s'il n'y avait pas de téléportation. Au cas ou ce n'est pas clair, je prepare une vidéo qui arrivera soit ce soir, soit demain.

En tout cas, merci !


EDIT : lien de l'effet trop cool of the dead : http://youtu.be/nhDPppfZVrk.

Chronos
Messages : 19
Inscription : 26 Oct 2014 17:00

Re: [C#] Portails dans Unity !

Message par Chronos » 29 Oct 2014 23:57

Tu devrais peut être revoir ton script de portail car j'ai l'impression que dans ton jeu a toi il y a une sorte de zoom, tu doit surement jouer avec le Field Of View non ?

Armelias
Messages : 29
Inscription : 17 Juin 2014 21:30

Re: [C#] Portails dans Unity !

Message par Armelias » 30 Oct 2014 11:42

En effet, en fait le FoV du joueur est à 60 et celui de la caméra qui genere la render texture à 100. Si j'ai fais ça c'est parce que sinon, quand je traverse le portail, la saccade est plus accentuée et la liaison entre la texture et ce que vois le joueur se fait mal.

Chronos
Messages : 19
Inscription : 26 Oct 2014 17:00

Re: [C#] Portails dans Unity !

Message par Chronos » 30 Oct 2014 13:10

bah moi ce que je voit c'est qu'il passe de 60 a 100 fluidement mais qu'il retourne brusquement a 60.

Armelias
Messages : 29
Inscription : 17 Juin 2014 21:30

Re: [C#] Portails dans Unity !

Message par Armelias » 30 Oct 2014 14:29

Le fov du joueur est toujours à 60 hein.

J'ai 2 caméras : celle du joueur, qui est ma main camera et celle qui rend la render texture. Celle du joueur à un FoV de 60, constant, et celle de la renderTexture a un fov de 100, contant aussi.

Mais pour en revenir à l'exemple de rendu que je vous ai linké, comment est-ce possible d'arriver à quelque chose comme ça ? Y a t il une téléportation ? Comment se fait elle ?

Avatar de l’utilisateur
Titan
Messages : 582
Inscription : 12 Sep 2011 13:54
Contact :

Re: [C#] Portails dans Unity !

Message par Titan » 05 Nov 2014 01:33

J'ai regardé plusieurs vidéo, et effectivement les mecs ont résolu ça à l'arrache et le résultat est pas terrible. J'ai passé tout mes sessions de portal à imaginer le code de valve, déformation professionnel on va dire :D. voici la seul solution qui me parraisse valable:

déjà petite parenthèse, tu va virer ta camera et tu va repartir d'un script de miroir pour faire ton portail et tu aura corriger le visuel.(http://wiki.unity3d.com/index.php/MirrorReflection3).

Maintenant pour le feeling: tu ne va téléporter ton joueur que lorsque sont centre arrive exactement à la surface du mesh tu va avoir un problème avec le collider de ton joueur, ou plutôt avec celle de ton terrain, d’ailleurs avec un "teleport simple" sur trigger, dés que ton perso accélére un peut il se retrouver freiner par la collision contre le mur avant le déclenchement du trigger et tu devrait commencer à augmenter de plus en plus la taille de ton trigger pour compenser et ça deviendrait vraiment moche à basse vitesse...

il faut donc désactiver les colision avec le terrain! c'est en tout cas la seul solution qui me soit venu en 20h+ de jeu.... :
-Ce que je te propose, que je n'ai pas encore eu le temps de prototyper, c'est de mettre un trigger assez large pour être sur d'éviter le bug de collision à grande vitesse (~2mª), et pas trop gros, pour pouvoir générer un nouveau mesh collider procedural à la volé sans ressentir cet éternel freeze pénible de physX quand il doit process de la géométrie (normalement pas de soucis içi) et dans ton nouveau mesh tu n'oublie pas le trou de ton portail!.
-Une autre solution à prototyper serais d'avoir une fonction onCollisionEnter sur ton perso qui se charge d'annuler les collision indésirable, ça parait plus propre mais j'ai peur que le résultat soit plus hasardeux et plus lourd, et il faut toujours ajouter un meshCollider pour des collisions net avec les bords du portail.

ps: Je reprend ta video et Il semble que tu te soit simplifier la vie en ayant pas de collider derrière ton portail et qu'il soit fixe, dans ce cas avec une simple teleportation au bon moment et un script de miroir améliorer tu devrais plus rien sentir, la clé étant de ne pas déclencher le Tp dans OnTriggerEnter, mais dans ton onTriggerStay avec une condition qui attend le moment exact ou ton perso passe derrière le plan. cette condition va d’ailleurs même t'éviter le bug de la téléportation infini.
____________________________________________
Hop Boy

Avatar de l’utilisateur
minirop
Messages : 184
Inscription : 25 Juin 2014 12:58

Re: [C#] Portails dans Unity !

Message par minirop » 05 Nov 2014 14:40

Titan a écrit :J'ai passé tout mes sessions de portal à imaginer le code de valve
j'avais vu passer, il y a quelques temps, un document qui explique quelques détails techniques (mais impossible à remettre la main dessus). ça parlait de la duplication du cube lorsqu'il passe le portail, le fait quel le personnage se faisait "recentrer" quand il s'approche du portail car trop dur de bien "viser" juste, etc.
Développeur Nintendo & PS Vita RIP PSM. Vive moi. Vive Unity. Flappikachu Vita

Avatar de l’utilisateur
Titan
Messages : 582
Inscription : 12 Sep 2011 13:54
Contact :

Re: [C#] Portails dans Unity !

Message par Titan » 12 Nov 2014 19:18

Je travail sur une problématique similaire alors j'ai pris le temps de faire un petit test de portail.
https://www.youtube.com/watch?v=43UcfjpgmfQ
Les rotations/translations sur la matrice de la camera pour déplacer le portail sont beaucoup plus complexe que je ne l'aurait cru (je suis un peu rouillé en math :cry: ) et j'y ai passé des heures pour le debug. Si ça vous intéresse je pourrais nettoyer le code pour virer le contenu non libre et faire un package.

J'ai rencontré 2 problème auquel je n'avais pas pensé la semaine dernière:
- la spéculaire est incorrecte, je sais pas trop pourquoi, mais ça rend la transition visible.
- le cliping plane, je haï les clipping plane. je l'ai mis très faible (pour un monde ouvert ça risquerai de poser des problème de Z fight un peut partout) et j'ai j'ajouté un petit offset quand on franchit le portail, qui rend aussi la transition visible.
____________________________________________
Hop Boy

Répondre

Revenir vers « Scripting »