Se connecter

Informatique

Création de Jeux

Sujet : J'aide les gens dans Unreal Engine
TechnoForce3
Niveau 39
20 mai 2022 à 10:11:43

Le 20 mai 2022 à 09:57:32 :
Les deux oui. Tous tes inputs tu les mets dans les settings du projet (par exemple touche Z = Action AVANT). Et dans le bp du player controller, tu geres l'action AVANT. J'imagine (car je l'ai jamais fait) que si tu as des inputs specifiques a certains pawn, tu les ajoutes comme actions. (par exemple klaxonner).

Ah d'accord, je crois que j'ai enfin compris. Dans ma tête, on ne pouvait associer une touche qu'à une seule action ce qui provoquerait un code spaghetti dans le Controller mais en fait si on peut associer une touche à plusieurs actions, le downcast n'est pas trop gênant. Ca fait juste autant d'appels de fonctions qu'il y a d'action associé à la touche mais ça ne doit pas être trop coûteux car le downcast est la première action et s'il échoue on arrête la fonction.
Merci, je vois comment implémenter ce genre d'opérations maintenant.

Lapintade
Niveau 25
20 mai 2022 à 10:13:38

ok super. Tiens nous au courant de tes avancées. C'est un sujet interessant.

TechnoForce3
Niveau 39
24 mai 2022 à 09:20:14

Après avoir de nouveau creusé la question, je pense que ce lien https://forums.unrealengine.com/t/how-to-handle-input-from-playercontroller-instead-of-pawn/296752/9 donne l'idée générale de ce qu'il faut faire.
On se retrouve avec 2 choix : soit nos différents types de pawn ne partagent pas d'interface/classe mère commune (exception de APawn) et donc dans nos évènements on cast en PawnA ou PawnB au besoin. Soit on créé une interface de base qui déclare avec une implémentation vide tous les types d'actions et mouvements possibles par nos pawns et réimplémante au besoin l'action.
L'avantage de la deuxième solution étant de faire du cast dans une classe plus légère et laisser la vtable jouer son rôle d'appel aux bonnes méthode. Cette approche pourrait être plus performante si le développeur travaille beaucoup en blueprint car il me semble avoir lu dans la doc que dans le cas de cast en blueprint (du moins en classe blueprint), toute la classe doit être chargé lors du cast même s'il échoue. Elle demande cependant de remodifier cette interface si l'on veut rajouter un nouveau type d'action.

Lapintade
Niveau 25
24 mai 2022 à 11:13:29

La deuxieme est plus elegante. Je pense pas que pour des events on puisse parler de performance (ca arrive peut souvent, donc peu importe que les appels soient plus rapides ou pas).

Sprycotcot
Niveau 10
01 juin 2022 à 19:19:18

Salut !
J'essaie de faire un jeu multijoueur et j'ai quelques difficultés avec la réplication. Les mouvements sont à peu près comme je le souhaite à l'exception de mon problème.
Vu du dessus, les joueurs contrôlent un char qui vise dans la direction de notre souris (projeter sur le plan du canon): https://image.noelshack.com/fichiers/2022/22/3/1654103206-tank.png

Problème: Ça fonctionne sur le joueur-serveur, les clients voient sa tour bouger, mais la tour des autres joueurs ne bouge pas.
blueprint: https://image.noelshack.com/fichiers/2022/22/3/1654102442-image-blueprints.png

J'ai essayé de glisser un custom event en multicat entre "Viser" et "Set World Rotation", mais là tous les chars visent vers le curseur, et uniquement chez lui et pas sur le serveur, donc ça ne fonctionne pas.

Tour est un static mesh component avec l'option Component Replicates de cochée

J'ai l'impression que je loupe quelque chose de basique mais je comprend pas quoi, si vous avez une idée :hap:

Lapintade
Niveau 25
01 juin 2022 à 22:14:41

a mon avis c'est pas "viseur" qu'il faut repliquer, mais plutot le mesh de la tour. Sur chaque joueur, le curseur est different, et il sert a calculer l'orientation de la tour. Les autres doivent uniquement voir l'etat du tank+tour, et non le viseur/curseur. (si tu replique le curseur, tout le monde va avoir le meme, et tous les tank vont viser dans la meme direction, c'est pas ce que tu veux ....).

Sprycotcot
Niveau 10
01 juin 2022 à 22:39:42

Il n'y a pas de viseur, c'est juste le curseur de la souris de chaque joueur. Je fais juste appelle à une fonction "Viser" qui doit tourner la tour dans la bonne direction et l'envoyer vers le serveur. :hap:

Le mesh de la tour est déjà répliqué, en fait j'ai l'impression que je récupère pas correctement le curseur pour chaque joueur, pourtant je pense mon blueprint est correct ( la partie à gauche du blueprint de joueur) :(

OOoooOOooOOOh
Niveau 4
02 juin 2022 à 00:47:43

Le 01 juin 2022 à 22:39:42 :
Il n'y a pas de viseur, c'est juste le curseur de la souris de chaque joueur. Je fais juste appelle à une fonction "Viser" qui doit tourner la tour dans la bonne direction et l'envoyer vers le serveur. :hap:

Le mesh de la tour est déjà répliqué, en fait j'ai l'impression que je récupère pas correctement le curseur pour chaque joueur, pourtant je pense mon blueprint est correct ( la partie à gauche du blueprint de joueur) :(

Je pense qu'essayer de lire la position de la souris des autres joueurs te donne des valeurs qui n'ont aucun sens (comportement indéfini). Je pense que tu devrais te concentrer sur le fait de répliquer l'angle de la tour plutôt que le curseur.

Par exemple, tu pourrais séparer ta fonction viser en deux sous fonctions :

"Viser Curseur" s'éxécute sur le client, calcule l'angle dans lequel la tour doit se tourner, puis appelle la fonction "Viser Angle"

"Viser Angle", quand à lui, s'éxécute sur le serveur (il est répliqué), et prend en entrée l'angle auquel la tour doit se tourner

Sprycotcot
Niveau 10
02 juin 2022 à 15:31:51

Le 02 juin 2022 à 00:47:43 :

Le 01 juin 2022 à 22:39:42 :
Il n'y a pas de viseur, c'est juste le curseur de la souris de chaque joueur. Je fais juste appelle à une fonction "Viser" qui doit tourner la tour dans la bonne direction et l'envoyer vers le serveur. :hap:

Le mesh de la tour est déjà répliqué, en fait j'ai l'impression que je récupère pas correctement le curseur pour chaque joueur, pourtant je pense mon blueprint est correct ( la partie à gauche du blueprint de joueur) :(

Je pense qu'essayer de lire la position de la souris des autres joueurs te donne des valeurs qui n'ont aucun sens (comportement indéfini). Je pense que tu devrais te concentrer sur le fait de répliquer l'angle de la tour plutôt que le curseur.

Par exemple, tu pourrais séparer ta fonction viser en deux sous fonctions :

"Viser Curseur" s'éxécute sur le client, calcule l'angle dans lequel la tour doit se tourner, puis appelle la fonction "Viser Angle"

"Viser Angle", quand à lui, s'éxécute sur le serveur (il est répliqué), et prend en entrée l'angle auquel la tour doit se tourner

J'ai essayé beaucoup de trucs hier soir et aujourd'hui, mais toujours aucune solution. Soit le joueur vise correctement mais aucun changement chez les autres joueurs, soit il n'y a que le joueur-serveur qui bouge et que les autres peuvent voir... :(

Est-ce que c'est ce à quoi tu pensais dans ton message ou alors il y a une erreur ?
https://image.noelshack.com/fichiers/2022/22/4/1654176339-test2.png

Sur le forum unreal y'a différents topics pour le même problème mais ils ont pas de réponse, tout du moins compréhensible :(
Est-ce qu'il y aurait un autre moyen sans utiliser "set world rotation" ?

1ArMeN3
Niveau 1
07 juin 2022 à 16:43:36

j'ai désespérément besoin d'aide pour faire un système de pêche avec des poissons de diffèrent rareté,
Mais je trouve NADA sur google pour m'aider même pas un simple système de pêche,
c'est un élément majeur de mon gameplay, quelqu'un pourrait m'aider svp

Lapintade
Niveau 25
08 juin 2022 à 08:57:04

Hello. Peux tu donner des details ? Car "systeme de peche" ca peut vouloir dire plein de choses differentes.
Google pourra te donner des reponses sur un theme precis, mais un assemblage de mecaniques pour un gameplay particulier, sur un moteur particulier, je doute que tu puisses trouver.
On peut t'aider a decouper ton probleme.

OOoooOOooOOOh
Niveau 4
16 juin 2022 à 21:43:59

Ca fait plusieurs jours que je suis coincé sur un problème concernant le multiplayer.

J'ai réussi à faire un petit jeu ou on peut jouer à plusieurs en se connectant depuis une IP.
Le jeu ne se déroulait que sur une seule map, sans lobby ou moyen de recommencer la partie.

Je voulais améliorer ce jeu, notamment en ajoutant un système de lobby, de pseudo et de comptage de points.

Je n'ai aucun problème à créer un lobby, à récupérer pseudo et nombre de points. Puis à passer au niveau de gameplay avec servertravel.

Cependant, je ne trouve pas comment faire pour identifier un joueur de façon persistante entre les niveaux.
Genre, dans le game instance de mon serveur, je note une liste de structs qui contiennent pseudos et points quand je suis dans le lobby. Et je déballe tout ça une fois arrivé dans le niveau de gameplay. Mais comment je sais quel joueur correspond à quel struct de mon array ?

Le player controller id change au changement de niveau, le player id dans le playerstate pareil. Le seul truc qui marche c'est de stocker un identifiant dans le game instance du client, mais ça ça permet de tricher.

C'est pas possible, je dois louper une node très évidente, mais quand je cherche sur internet je ne trouve que des solutions incomplètes.

OOoooOOooOOOh
Niveau 4
16 juin 2022 à 22:08:47

Le 07 juin 2022 à 16:43:36 :
j'ai désespérément besoin d'aide pour faire un système de pêche avec des poissons de diffèrent rareté,
Mais je trouve NADA sur google pour m'aider même pas un simple système de pêche,
c'est un élément majeur de mon gameplay, quelqu'un pourrait m'aider svp

Comme l'a dit Lapintade, pour pouvoir t'aider il faut qu'on sache quel genre de système de pèche tu veut implémenter (et aussi comment se joue ton jeu à la base).

Par exemple, voici trois jeu avec des systèmes de pèches complètement différents :

https://www.youtube.com/watch?v=DU7mEOwNa64

https://www.youtube.com/watch?v=LPyl7J266gA

https://www.youtube.com/watch?v=n4BQPXgERr4

Tu te rends bien compte qu'il n'y a pas de système de pèche "universel"

Avant toute chose, il faut que tu décides à quoi ressembleras ton système de pèche

OOoooOOooOOOh
Niveau 4
16 juin 2022 à 22:49:05

Le 02 juin 2022 à 15:31:51 :
...
Est-ce qu'il y aurait un autre moyen sans utiliser "set world rotation" ?

Récemment je suis tombé sur un problème très similaire ( un truc qui tourne et il faut le réplicater )

j'ai fais ça et ça a marché :

https://www.noelshack.com/2022-24-4-1655412512-replicate-rotatoin.png

Pseudo supprimé
Niveau 10
17 juin 2022 à 18:50:10

Bonjour,
J'ai une petite question, est il possible de visualiser le contenu d'un jeu développé sous unreal engine à partir des fichiers steam ?
En particulier les modèles 3d et les textures pour voir comment elles sont faites.

Lapintade
Niveau 25
19 juin 2022 à 19:09:23

Le 16 juin 2022 à 21:43:59 :
Ca fait plusieurs jours que je suis coincé sur un problème concernant le multiplayer.

Ici peut etre :
https://forums.unrealengine.com/t/how-do-i-identify-specific-players-on-a-multiplayer-game/302955
(lire ID dans le player state)

OOoooOOooOOOh
Niveau 4
19 juin 2022 à 19:40:24

J'ai essayé justement.

Le problème c'est que cet ID change entre les niveaux

genre si t'as les joueurs 1, 2, 3, quand tu changes de niveau t'auras les joueurs 4, 5, 6 :/

Lapintade
Niveau 25
21 juin 2022 à 23:25:50

C'est genant en effet.

PillsDispenser
Niveau 61
14 août 2022 à 03:58:15

Quelqu'un peut m'aider à essayer de faire une transition de fluide de caméra entre la vue à la première personne et la vue à la troisième personne.
J'ai deux camera component sur mon pawn mais je ne sais pas comment faire ? J'ai essayé la set view target with blend fonction mais cela nécessite un acteur comme référence et j'ai un composant de caméra.

Lapintade
Niveau 25
14 août 2022 à 15:35:24

Cette fonction fait partie du player controller. En reference, tu lui passe un "Get player controller".

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