Se connecter

Informatique

Création de Jeux

Sujet : J'aide les gens dans Unreal Engine
bapt_mann
Niveau 4
02 juillet 2019 à 17:57:24

Tout d'abord, merci pour ta réponse.
Pour commencer, j'ai utilisé le mot "map" mais "level" est plus correct.
En fait j'ai fait en sorte d'être téléporté dans un second level qui contient un "player start" qui me force à regarder dans une direction précise, forcément.
Dans le level 1 j'ai créé une sorte de cabine, que j'ai copié collé dans le level 2, mais ce n'était pas à priori la meilleure manière de faire ce que je voulais.
A priori ce que tu as décrit permet de modifier un seul et même level ?
si c'est le cas, je ne peux pas l'utiliser car mon personnage se fait réellement "téléporter" d'un level à l'autre...

Alex3112
Niveau 24
02 juillet 2019 à 19:47:30

Map, level, niveau, on parle toujours de la même chose.

"Téléporter" ça ne veut pas dire grand chose dans un jeu vidéo où tout est fake. Dans le système que tu décris comme dans celui que je décris, il s'agit de décharger un niveau de la mémoire puis de charger un autre niveau en mémoire.

Qu'est-ce que tu veux dire par "le joueur ressent le coupe"? Si tu veux qu'il n'y ai pas de chargement pendant le passage d'un niveau à un autre, il faut utiliser le level streaming qui est fait pour ça. Si tu cherche à faire autre chose, est-ce que tu peux être plus explicite?

bapt_mann
Niveau 4
02 juillet 2019 à 21:35:47

Lorsque je dis que le joueur ressent la coupe, c'est que lorsque le joueur entre dans la cabine, un trigger le détecte, lance un timer de quelques secondes, pour ensuite faire charger la seconde map dans laquelle la cabine est également présente. Sauf que lors du passage du level 1 au level 2, la position et la rotation du joueur est remise à 0 en quelques sortes, peu importe dans quelle position il était. Je vais donner une exemple concret : le personnage rentre dans la cabine, se met dans un coin et regarde vers le haut. Lorsqu'il sera téléporté, il sera au milieu en regardant devant lui... Si je ne suis pas clair, je pourrais éventuellement rec l'écran et partager un lien pour le visionner.

Alex3112
Niveau 24
02 juillet 2019 à 23:13:04

Pour le fait que le personnage soit "réinitialisé" c'est comme ça dans n'importe quel jeu.
Quand tu rentre dans une maison dans Skyrim par ex, peu importe que tu ouvres une porte en regardant en bas et en étant tourné sur le côté, ton personnage apparait le dos tourné à la porte et en regardant devant lui une fois dans la maison.
Quand tu ouvres un nouveau level, le personnage de ton joueur est une nouvelle entité avec toutes ses variables remises par défaut.
Pour lui donner les variables que le joueur avait avant le changement de map, il faut que tu sauvegarde ces variables avant le chargement et que tu les charges après.

Là par exemple tu peux sauvegarder la position et la rotation du personnage et de sa caméra et les charger une fois la nouvelle map chargée mais c'est se casser la tête pour pas grand chose.
Si tu veux une transition réellement invisible qui ressemble vraiment à une téléportation, utilise le level streaming mais si tu as de toutes façons un écran de chargement entre les deux, ça ne choque normalement pas le joueur que d'avoir son personnage placé et orienté par le jeu en entrant dans un nouveau level

Si ce qui te freine c'est d'avoir à refaire tes deux maps, ce n'est pas le cas. Tu as juste à créer une troisième map, à y ajouter tes deux maps en tant que sub level et afficher/cacher celle que tu veux avec un trigger

Alal_Sorain
Niveau 4
03 juillet 2019 à 16:25:16

Le 21 juin 2019 à 02:00:40 ALEX3112 a écrit :
Ha mais tu cast vers l'ascenseur :-d
C'est normal que ça ne fonctionne pas puisque l'acteur qui entre en collision avec le trigger, c'est ton perso, pas l'ascenseur, du coup si tu mets un node "print string" (super utile pour debug un code) sur la sortie "cast failed", tu verra que le cast échoue toujours.

Pour obtenir une référence de l'ascenseur, tu as plusieurs options
- utiliser une interface que tu utilise dans le blueprint du bouton et dans le blueprint de l’ascenseur :
https://docs.unrealengine.com/en-US/Engine/Blueprints/UserGuide/Types/Interface/UsingInterfaces/index.html
- Mettre ton code dans le level blueprint et faire glisser ton ascenceur depuis le world outliner vers le graph du level blueprint (ça créé une référence directe, pas besoin de cast)
- Utiliser un "get all actor of class" en choisissant la classe de ton ascenseur et faire un "get" à l'index zéro (ça te donne une référence du premier blueprint de cette classe qui se trouve dans ton level) mais c'est sale niveau performance parce que ça fouille dans tout les objets que contient ton niveau (ce qui est peu problématique si tu en as pas beaucoup)

Juste pour dire que c'est bon, j'ai réussi (j'ai fait avec la 2ème méthode que tu m'as proposée). Je m'attèle à autre chose là. Je reviendrais si besoin ^^ Merci infiniment pour tes explications si claires et détaillées, ALEX ! :noel:

bapt_mann
Niveau 4
04 juillet 2019 à 14:21:13

Merci beaucoup pour ton aide, effectivement je m'embête pour rien, je devrais m'intéresser à des choses plus importantes avant, puis régler ces petits problèmes plus tard ! Je vais appliquer ce système de level streaming, ça al'air dêtre une bonne alternative ! A part ça, entre temps, j'ai eu un petit souci de blueprint en voulant caster un acteur pour récuperer une de ses variables, mais une erreur intervient car je ne sais pas quoi lui attribuer dans "objet"... Une question de débutznt j'imagine, je suis en train de faire mes recherches sans résultats ... :(

Alex3112
Niveau 24
04 juillet 2019 à 14:30:40

Regarde la réponse que j'avais donné à Alal_Sorain juste au dessus de ton message, tu peux appliquer une de ces solutions pour obtenir la référence de l'acteur avec lequel tu veux communiquer mais il y en a des dizaines d'autres.

bapt_mann
Niveau 4
04 juillet 2019 à 15:33:14

Oui, je vais tester ces solutions même si j'en ai déjà testé quelques unes, ce qui me dérange c'est plutôt de ne pas comprendre à quoi correspond réellement ces références d'acteur et donc je suis contraint de mettre au "hasard". Merci pour ton aide en tout cas !

bapt_mann
Niveau 4
05 juillet 2019 à 18:27:55

J'ai testé ta 3eme méthode pour retrouver ma variable, ( étant donné qu'une seule variable est présente, les perfs ne sont pas trop attaquées) mais mon script ne fonctionne pas :(
C'est un script très simple ( Je découvre le logiciel ) mais je ne vois pas pourquoi ca ne fait pas ce que je veux. Ci joint une capture d'écran, je vais détailler ce qui se passe, et si vous avez la solution, ce serait génial :)
https://zupimages.net/up/19/27/7h5g.png
J'explique : A droite, une partie du bp d'une clé, appelée "key". On peut voir que la clé se téléporte sur le joueur, met une variable "player has key" en true, et affiche un message TEST avant d'être supprimée. Je tiens à préciser que le message TEST s'affiche bien lorsque l'on prend la clé.
A gauche, on retrouve un script de la porte, qui regarde la variable "player has key" qui débouche sur un Branch. Le souci, c'est que le résultat se fait systématiquement sur False... J'ai déconné où ?

Alex3112
Niveau 24
05 juillet 2019 à 20:19:10

Déjà sur la capture de gauche, ton "cast to key class" n'est pas connecté. Soit il faut brancher la flèche d’entrée et la flèche de sortie comme n'importe quel node, soit il faut faire un clic droit et le convertir en "pure cast".

Mais de toute façon, le cast ne sert à rien ici.
Le "get all actors of class" va chercher dans toutes les classes chargées, celles qui sont de la classe sélectionnée et en faire une array (une liste de variables). Tu peux donc supprimer ce cast et sélectionner directement la classe que tu cherche sur le node "get all actors of class" en cliquant sur le menu déroulant du pin "actor class"
Aussi, une array commence toujours par l'index 0, pas 1. Ton "get" doit être sur l'index 0, là il cherche le deuxième objet de la liste, objet qui n'existe pas si tu n'as qu'un seul objet de cette classe dans ton niveau.

Sur la capture de droite, je comprend pas trop ce que tu veux faire.
Il n'y a aucune condition donc c'est normal que le "print string" soit toujours executé quand tu appuie sur cette touche

razakhel
Niveau 10
05 juillet 2019 à 21:29:04

Bonjour à tous, ma question est assez spécifique mais je pose au cas où :hap:

Je souhaite construire une ville seamless en utilisant une technique similaire à celle utilisée dans Jak et Daxter.
Pour résumer la map gigantesque est divisée en plusieurs zones puis un level design et des mouvements de caméra ingénieux permettent de masquer la transition d'une zone à la suivante. Ils utilisent aussi le LOD par ci par là mais ce n'est pas le gros de mon problème.

J'aimerais donc reproduire cette technique en divisant ma ville en plusieurs quartiers qui seraient reliés entre eux de façon à déclencher le chargement/déchargement d'assets à l'insu du joueur (par exemple une ruelle étroite disons avec un angle de vue très limité). Je pense avoir le choix entre 2 solutions:

-Le Level Streaming : le problème que je vois ici c'est que je devrais couper mon sol en plusieurs partie et faire en sorte que les textures s'emboîtent bien. Ca exige aussi de faire beaucoup de petits levels, rien de trop insurmontables mais j'ai l'impression que cette approche est un peu maladroite.

-L'Asset Manager : Le problème que je vois ici c'est qu'il n'est pas possible à ma connaissance de créer une map complète avec les assets bien placés puis de charger ces derniers à la position préalablement définie dans l'éditeur avec l'asset manager. La solution que je verrais c'est d'enregistrer les infos de Location/Rotation dans la classe de chacun des PrimaryAssets puis d'en faire des bundles mais ça me semble bizarre.

Si certains ont des idées n'hésitez pas, bon courage pour vos projets :ok:

Alex3112
Niveau 24
05 juillet 2019 à 21:54:22

Ce que tu cherche c'est ceci : https://docs.unrealengine.com/en-US/Engine/LevelStreaming/WorldBrowser/index.html
Le système de streaming, de LOD, etc. tout est automatique.
Chaque cellule contient un volume dont tu peux fixer la taille pour les aligner sur une grille comme dans les jeux The Elder Scrolls/Fallout ou bien tu peux les laisser s'adapter automatiquement aux objets contenus dans chaque cellule et avoir des zones de différentes formes qui se chevauchent comme dans un GTA.
Ces volumes détectent la présence du joueur et stream automatiquement les différentes cellules en fonction d'une distance choisie.

razakhel
Niveau 10
06 juillet 2019 à 10:13:34

Oh purée comment j'ai pu ne pas voir une telle fonctionnalité :ouch:

Je te remercie énormément, ça a l'air d'être exactement ce que je recherche ! Hâte de tester tout ça !

Alex3112
Niveau 24
06 juillet 2019 à 13:34:41

Le 06 juillet 2019 à 10:13:34 razakhel a écrit :
Oh purée comment j'ai pu ne pas voir une telle fonctionnalité :ouch:

Je te remercie énormément, ça a l'air d'être exactement ce que je recherche ! Hâte de tester tout ça !

Ca a été une des requêtes majeures avec l'avènement des jeux open world. Le système est encore loin d'être parfait mais on se rapproche de ce qu'on trouve sur les moteurs des TES/Fallout, The Witcher 3, GTA, etc.
C'est aussi utilisé sur Ark Surivial Evolved

razakhel
Niveau 10
07 juillet 2019 à 12:07:06

Le 06 juillet 2019 à 13:34:41 ALEX3112 a écrit :

Le 06 juillet 2019 à 10:13:34 razakhel a écrit :
Oh purée comment j'ai pu ne pas voir une telle fonctionnalité :ouch:

Je te remercie énormément, ça a l'air d'être exactement ce que je recherche ! Hâte de tester tout ça !

Ca a été une des requêtes majeures avec l'avènement des jeux open world. Le système est encore loin d'être parfait mais on se rapproche de ce qu'on trouve sur les moteurs des TES/Fallout, The Witcher 3, GTA, etc.
C'est aussi utilisé sur Ark Surivial Evolved

Ah ok je vois ! Merci encore pour la découverte :ok:

Eensame
Niveau 8
10 juillet 2019 à 01:14:44

Bonjour à vous, j'espère que vous allez bien. Alors voilà disont que je bloque avec Unreal. Je souhaiterai donner des bruits de pas à l'antagoniste de mon jeu. Alors j'ai essayé de lui mettre depuis l'animation directement comme à la formation de Mathieu mais on l'entend dans toute la map. Alors j'ai ajouter une source sonore au viewport du mob, avec une certaine zone d'entente et j'ai fait le bluerprint pour activer le son si le personnage entrait dans la zone, et stopper le son quand on sort, mais la le son s'arrête plus. Et voila le problème, comment pourrait on ajouter des bruits de pas à un monstre et qu'on ne l'entende pas dans toute la map ?

razakhel
Niveau 10
10 juillet 2019 à 02:07:46

Le 10 juillet 2019 à 01:14:44 Eensame a écrit :
Bonjour à vous, j'espère que vous allez bien. Alors voilà disont que je bloque avec Unreal. Je souhaiterai donner des bruits de pas à l'antagoniste de mon jeu. Alors j'ai essayé de lui mettre depuis l'animation directement comme à la formation de Mathieu mais on l'entend dans toute la map. Alors j'ai ajouter une source sonore au viewport du mob, avec une certaine zone d'entente et j'ai fait le bluerprint pour activer le son si le personnage entrait dans la zone, et stopper le son quand on sort, mais la le son s'arrête plus. Et voila le problème, comment pourrait on ajouter des bruits de pas à un monstre et qu'on ne l'entende pas dans toute la map ?

Je connais pas le tutoriel dont tu parles mais j'imagine que si tu parles de sons depuis l'animation c'est que tu les actives avec une Notify aux frames où les pieds touchent le sol ?
Si j'ai bien compris ton problème tu veux juste que le son s'atténue c'est ça ?
Tu as vu cette page https://docs.unrealengine.com/en-US/Engine/Audio/DistanceModelAttenuation/index.html ?

Alex3112
Niveau 24
10 juillet 2019 à 03:18:56

Le 10 juillet 2019 à 01:14:44 Eensame a écrit :
Bonjour à vous, j'espère que vous allez bien. Alors voilà disont que je bloque avec Unreal. Je souhaiterai donner des bruits de pas à l'antagoniste de mon jeu. Alors j'ai essayé de lui mettre depuis l'animation directement comme à la formation de Mathieu mais on l'entend dans toute la map. Alors j'ai ajouter une source sonore au viewport du mob, avec une certaine zone d'entente et j'ai fait le bluerprint pour activer le son si le personnage entrait dans la zone, et stopper le son quand on sort, mais la le son s'arrête plus. Et voila le problème, comment pourrait on ajouter des bruits de pas à un monstre et qu'on ne l'entende pas dans toute la map ?

Visiblement tu joues un son en 2D, pas 3D.
Tu utilises bien un "play sound at location"?
Est-ce qu'on peut voir ton code qui joue le son?

Lapintade
Niveau 25
10 juillet 2019 à 11:37:07

Au cas ou, ma boite recrute :
https://emploi.afjv.com/emploi-jeux-video/EDEV1461-16167

Alex3112
Niveau 24
10 juillet 2019 à 14:20:01

Le 10 juillet 2019 à 11:37:07 Lapintade a écrit :
Au cas ou, ma boite recrute :
https://emploi.afjv.com/emploi-jeux-video/EDEV1461-16167

Chouette offre. J'aurais bien postulé si je n'étais pas déjà occupé, à tel point j'ai l'impression de lire ma description (à part les horaires de bureaux étant donné que je vis plutôt à l'heure US :-d )

Par pure curiosité, qu'est-ce que tu peux divulguer sur le projet? Si j'ai bien compris c'est une version plus poussée et standalone de ce que propose l'éditeur d'UE4 au niveau de l'édition de niveau en VR?
Ca cible l'architecture? l'ingénierie?
Ps: C'est une typo ou c'est normal "MeshroomVR/MeshrommVR"

Sujet : J'aide les gens dans Unreal Engine
   Retour haut de page
Consulter la version web de cette page