//DB RS ~ Rotation caméra, Network

Pour les scripts écrits en C#
Règles du forum
Merci de respecter la NOMENCLATURE suivante pour vos TITRES de messages :

Commencez par le niveau de vos scripts
DB = Débutant
MY = Moyen
CF = Confirmé

Puis le domaine d'application
-RS = Réseau
-AL = Algorithmie

Exemple :

[DB-RS] Mouvement perso multijoueur
CruckZz
Messages : 3
Inscription : 15 Fév 2018 10:07

//DB RS ~ Rotation caméra, Network

Message par CruckZz » 15 Fév 2018 10:56

Bonjour à tous

J'ai un problème sur mon script en C# et je ne sais pas comment le résoudre (Je débute sur Unity ~ 3 semaines de pratiques).
Le but final étant de créer une plateforme multiplayers ou un personnage capable de bouger dans un espace 3D avec une vue FPS, j'ai procédé de la manière suivante:

Pour effectuer des tests, j'ai repris une préfab existante d'un personnage en 3D sur l'AssetStore que l'on appellera ici personnage_entier.
Cette préfab est constituée d'une multitude de sous ensembles (bras gauche, bras droit, jambe gauche etc.. Et la tête qui va ici nous intéresser (On appellera le sous ensemble tête: personnage_tête)).
J'ai créé un NetworkManager (Avec NetworkManager +NetworkManager HUD) et j'ai codé les mouvements de mon personnage de cette manière:
-Translation du personnage avec les touches z,q,s,d.
-rotation du personnage sur l'axe Y avec le mouvement de la souris sur l'axe X.

J'ai ajouté un NetworkIdentity à la préfab personnage_entier puis j'ai glissé celle ci dans le spawn info de mon NetworkManager comme Player.

Pour ne pas créer de soucis de personnage qui fait des pirouettes ( :gene: ), j'ai scripté la rotation sur X seulement sur l’élément personnage_tête. Lorsque je bouge donc ma souris de haut en bas, la tête bouge donc de haut en bas.

j'ai ensuite créé une main caméra que je relis a mon personnage de la manière suivante:

Code : Tout sélectionner

if (IsLocalPlayer){
Camera.main.transform.position = this.transform.position + this.transform.position.up;
Camera.main.transform.parent = this.transform;
}
Lorsque je lance le jeu j'en viens donc a pouvoir avoir deux interfaces (une avec un build et l'autre sur l'appli Unity). Chaque page à sa propre caméra et peut se déplacer dans l'espace. Mais lorsqu'on bouge la souris de haut en bas, deux problèmes surviennent:
1) Le script de rotation autour de X se trouvant seulement sur la tête, qui n'est pas considéré comme LocalPlayer, car elle n'est qu'un composant de celui ci (Children) s'active sur tout les personnages.. En effet si je bouge ma souris sur l’écran 1 alors la tête du personnage contrôlé par l’écran 2 bouge elle aussi.
2) la caméra des personnage est liée à la préfab personnage_entier et donc ne bouge pas lorsque je fais bouger ma souris de haut en bas.

Ma solution au problème:
- Lier la caméra à la tête des personnages, mais je ne sais pas comment faire pour que mon scripts comprennent que je veux le lier au composant personnage_tête et non au composant personnage_entier;
- Faire en sorte que la tête ne soit contrôlable que par le LocalPlayer. Je ne sais pas non plus comment modifier mon scrip ou mon composant pour faire ça.


Désolé pour le post précédant qui, en effet était très mal expliqué.
Je serrai ravis de lire vos propositions.
Merci d'avance,

CruckZz :)
Dernière édition par CruckZz le 15 Fév 2018 12:33, édité 1 fois.
CruckZz

~~ La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi. Ici, nous avons réuni théorie et pratique : Rien ne fonctionne... et personne ne sait pourquoi ! ~~

Avatar de l’utilisateur
Iwa
Messages : 1131
Inscription : 25 Avr 2012 16:20
Contact :

Re: //DB RS ~ Rotation caméra, Network

Message par Iwa » 15 Fév 2018 11:59

Hello,

Je sais pas vous, mais j'ai pas du tout compris ni le problème, ni ce que tu veux faire, ni ta solution. Est-ce que c'est possible de nous refaire un petit topo. Déjà tu parles de réseau au milieu de tout ça sans trop expliquer ce que tu fais comme projet. Ensuite entre ta caméra, ta tête, le personnage ... il semble que tu ais une hiérarchie un peu spéciale mais impossible de bien l'appréhender.

Peux-tu nous faire un print screen de ta hiérarchie et retenter une explication s'il te plait? Sinon je t'avoue que dans l'état je me vois mal t'aider.
"N'est stupide que la stupidité Monsieur..." - Forest Gump
... sauf si tu lis pas ça :)

Si tu as tout ce qu'il te faut, merci de penser à basculer ton sujet en [RESOLU] en éditant ton tout premier post ;)

CruckZz
Messages : 3
Inscription : 15 Fév 2018 10:07

Re: //DB RS ~ Rotation caméra, Network

Message par CruckZz » 15 Fév 2018 12:50

Merci de ta réponse,

Je n'ai malheureusement pas l’occasion de faire un Screenshots de mon projet, je ne suis pas mon PC actuellement avec moi, mais c'est modifié! J'espère que tu comprendras mieux la situation et qu'on pourra m'aider :)
CruckZz

~~ La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi. Ici, nous avons réuni théorie et pratique : Rien ne fonctionne... et personne ne sait pourquoi ! ~~

Avatar de l’utilisateur
Iwa
Messages : 1131
Inscription : 25 Avr 2012 16:20
Contact :

Re: //DB RS ~ Rotation caméra, Network

Message par Iwa » 15 Fév 2018 13:13

CruckZz a écrit :
15 Fév 2018 10:56
Pour ne pas créer de soucis de personnage qui fait des pirouettes ( :gene: ), j'ai scripté la rotation sur X seulement sur l’élément personnage_tête. Lorsque je bouge donc ma souris de haut en bas, la tête bouge donc de haut en bas.
Du coup c'est Y plutôt pour le haut bas ;)
CruckZz a écrit :
15 Fév 2018 10:56
j'ai ensuite créé une main caméra que je relis a mon personnage de la manière suivante:

Code : Tout sélectionner

if (IsLocalPlayer){
Camera.main.transform.position = this.transform.position + this.transform.position.up;
Camera.main.transform.parent = this.transform;
}
Pourquoi pas, pourquoi ne pas juste positionner ta Caméra à la même position que ta tête? Soit en Vector3.zero en position locale.

Après je m'y connais pas bien en réseau, ça fait bien trop longtemps que j'ai pas fait joujou avec ça mais en gros de ce que je comprends seul ce qui est sur ta racine tout en haut est pris en compte. Typiquement, tes mouvements z, q, s, d se font sur la racine de ton fameux prefab c'est ça?
Et tu ne peux pas faire le même traitement pour ta Tête pour une raison qui m'échappe mais je pense que c'est pratico-pratique. Il faut donc que tu transmettes via code cette fameuse rotation de tête via un message réseau ou alors tu te fais un script sur ta racine qui copie en somme la rotation de ta tête, comme ça ça devrait passer par le réseau.

Je dis peut-être des sottises après, c'est vraiment pas mon domaine de prédilection, je connais mal la nouvelle version.
"N'est stupide que la stupidité Monsieur..." - Forest Gump
... sauf si tu lis pas ça :)

Si tu as tout ce qu'il te faut, merci de penser à basculer ton sujet en [RESOLU] en éditant ton tout premier post ;)

CruckZz
Messages : 3
Inscription : 15 Fév 2018 10:07

Re: //DB RS ~ Rotation caméra, Network

Message par CruckZz » 15 Fév 2018 14:05

La caméra se place avec les coordoné qu'il y a dans mon script, donc elle se trouve bien au niveau de ma tête, mais elle n'y est pas liée, donc si ma tête tourne de haut en bas, elle ne le fais pas :/
CruckZz

~~ La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi. Ici, nous avons réuni théorie et pratique : Rien ne fonctionne... et personne ne sait pourquoi ! ~~

Avatar de l’utilisateur
Iwa
Messages : 1131
Inscription : 25 Avr 2012 16:20
Contact :

Re: //DB RS ~ Rotation caméra, Network

Message par Iwa » 21 Fév 2018 14:53

Ta caméra ne tourne pas sur le client ou sur le serveur?
"N'est stupide que la stupidité Monsieur..." - Forest Gump
... sauf si tu lis pas ça :)

Si tu as tout ce qu'il te faut, merci de penser à basculer ton sujet en [RESOLU] en éditant ton tout premier post ;)

Répondre

Revenir vers « (C#) CSharp »