CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

Animation Unity problème

]BalleJuju[
]BalleJuju[
Niveau 6
14 septembre 2016 à 19:41:38

Bonjour à tous,

Voilà cela fait quelque temps que je travaille sur mon jeu en multijoueur etc… Tout le multijoueur fonctionne armes, véhicules etc… cependant je rencontre un seul et unique problème qui me bloque. Comme vous le savez, dans tout jeux nous avons besoin d’animation de personnage. Cependant dans le Clientside, toutes les animations sont là, et fonctionne mais sur le serveurside les animations ne marchent pas. En gros le joueur A vois le joueur B bouger mais sans aucune animation (une espèce de personne figé). J’ai posté mon problème sur unity mais personne ne m’a répondu et cela fais 1 mois que je bute. Cependant sur Unity j’utilise l’animator et non l’animation. C’est à dire que je prends des animations faites avec Fuse que je veux remettre dans mon jeu.

J’ai fais cela :

using UnityEngine;
using System.Collections;

public class AnimationControllerSoldierTest : MonoBehaviour {

private Animator myAnimator;

public float VSpeed = 0.0f;

public float HSpeed = 0.0f;

private GameObject ModelAnimated;

private GameObject PlayerObject;

private Transform myTransform;

public int ChooseRandomAnim = 0;

//Set bool for stance.
public bool running = false;

// Use this for initialization
void Start ()
{
if (networkView.isMine == true)
{
myAnimator = GetComponent<Animator> ();
PlayerObject = transform.gameObject;

myTransform = transform;
ModelAnimated = myTransform.FindChild ("Swat_Animated").gameObject;
myAnimator = ModelAnimated.GetComponent<Animator>();
} else {
enabled = false;
}
}

// Update is called once per frame
void Update ()
{
//Random function.
//ChooseRandomAnim = Random.Range (0, 3);

//Right & Left; Forward & Backward.

//VSpeed = myAnimator.SetFloat("VSpeed", Input.GetAxis ("Vertical"));
//HSpeed = myAnimator.SetFloat ("HSpeed", Input.GetAxis ("Horizontal"));

VSpeed = Input.GetAxis ("Vertical");
HSpeed = Input.GetAxis ("Horizontal");

networkView.RPC("SendFloatHorizontalAndVertical", RPCMode.All, VSpeed, HSpeed);

ModelAnimated.transform.localPosition = new Vector3(0,-1,0);
}

[RPC]
void SendFloatHorizontalAndVertical(float VSpeedRPC, float HSpeedRPC)
{
myAnimator.SetFloat("VSpeed", VSpeedRPC);
myAnimator.SetFloat("HSpeed", HSpeedRPC);
//myAnimator.CrossFade("Walk_forward", 1f, 0, 10f);
}

}

Le débugger ne m’affiche aucune erreur…

ModelAnimated.transform.localPosition = new Vector3(0,-1,0);  Utilisé pour recentrer le joueur lors de désynchronisation.

Alors est-ce mon RPC (remote player control) qui ne vas pas ? ma méthode ? ou mon script qui est totalement faux ?

J’espère que vous m’aiderez car cela fait 1 an que je taff sur ce projet et je ne veux pas arrêter à cause d’u problème d’animation. Sincèrement aidez moi ^^  .

Cordialement Clément

Lapintade
Lapintade
Niveau 30
14 septembre 2016 à 19:49:36

Hello Clément,

C'est pas très clair, donc je me permets quelques questions

C’est à dire que je prends des animations faites avec Fuse que je veux remettre dans mon jeu.

Les animations Fuse sont dans ton jeu, ou tu veux les mettre dans ton jeu ? (elles n'y sont pas actuellement)

Alors est-ce mon RPC (remote player control) qui ne vas pas

Le système de RPC c'est en général pour passer des evenements. La je vois que tu passe la vitesse du perso a toute les frames. C'est quoi VSpeed et HSpeed ? (je te conseille d'utiliser des noms de variables plus explicites, c'est une bonne pratique de code, je ne devrai a avoir a te demander a quoi servent ces variables si elles avaient des noms suffisemment explicites).

Les RPC sont en effet utilisées pour déclencher des événements, comme les animations. Par exemple "ce perso comment a courir", "ce perso arrête de courir". Ainsi avec ton animateur tu peux déclencher et arreter l'animation du personnage sur le client.

Je ne connais pas le système reseau sous Unity, car j'utilise Unreal. Mais je compte en faire bientôt sur Unity.

LGV
LGV
Niveau 28
14 septembre 2016 à 20:06:35

Sans avoir de solution a proposer pour la partie animation (pas d'experience avec Unity), je remarque quand meme un autre probleme fondamental dans la conception qu'il faudra imperativement corriguer : l'envoir entre peers de donnees "gameplay" type "vitesse".

Cela conduit necessairement a des failles de securite (triche facilite cote joueur, etc.), des imprecisions sur la simulation (accumulation d'erreurs/deltas entre peers, etc.), bref tout un tas de problemes qui donne une experiences multijoueur problematique, voire inconsistente et injouable.

Il est imperatif de ne transmettre que les actions des joueurs (j'avance, j'active telle competence, etc.) ; la simu du host devient l'autorite, et envoie les etats de jeux aux peers. Les peers ont une simu locale (vitesse des joueurs, etc.), pour la continuite du jeu, mais utilisent les infos host pour corriger en permanence les valeurs (positions, collisions, etc.), le tout a grand renfort de facteurs de compensation, interpolation et prediction.

cela fait 1 an que je taff sur ce projet et je ne veux pas arrêter à cause d’u problème d’animation

visiblement c'est un risque technique majeur ; il aurait du etre prioritisé bien plus tot pour trouver une solution foncitonnelle ; sans quoi on peut se retrouver tardivement avec du contenu inutilisable ou des archis a reconstruire completement, ce qui, dans le cas de projets commerciaux, marquent souvent l'abandon pour faute de retards consequents ou de financement.

Apres dans ton cas il existe tres certainement une solution ; synchroniser des animations en reseaux fait partie des fonctionnalites de "base" ; apres a voir si la facon de proceder est compatible avec ta logique de jeu.

Message édité le 14 septembre 2016 à 20:09:44 par LGV
florent6262100
florent6262100
Niveau 9
14 septembre 2016 à 22:17:20

En soit, il peut partager ces deux valeurs de vitesse X et Y, en utilisant Mecanim, la valeur est clampé quand on utilise des déplacements full anim (et non via code)

Par contre si c'est pour du mouvement scripter, là c'est une erreur très grave, le risque de cheat est considérable !

Mais après quand tu utilise un système d'état, tu doit quand même partager la position dans les packets, pour lerpé le décalage éventuelle, ce qui pose aussi un risque de cheat, a moins d'utiliser un système de clé qui permet de déchiffrer le packet (ce qui peut rajouter de la latence)

Tu a pleins de méthodes réseau, certains dirons que c'est pas bien , d'autre que c'est bien, une chose, essaye et fait toi ton avis

Mais bon je m'écarte peut être un peu du sujet

Bonne chance

]BalleJuju[
]BalleJuju[
Niveau 6
15 septembre 2016 à 12:29:59

Je vous remercie de vos réponses, j'ai passer le compte à mon frère pour qu'ils puissent répondent à chacun de vous ^^.

Helliot_Ness
Helliot_Ness
Niveau 5
15 septembre 2016 à 14:20:31

Bonjour,

Sans renter dans les bons mécanismes réseau à mettre en place, je pense à la lecture rapide de ton code que ton problème est du est dû à une mauvaise logique de ta part.

Par exemple dans ta méthode Start()...


void Start()
{
  if  (networkView.isMine == true)
  {
    ...
  }
  else enabled = false;
}

Ta méthode RPC ne sera donc jamais exécutée coté client du fait que tu désactives l'ensemble de ton script !

Il existe aussi dans ton code d'autres erreurs de logiques et ou d'écriture, mais bon…

Je te conseille fortement tout simplement bien sûr de relire la doc fonctionnelle de l'Api réseau de Unity.
Et aussi de façon plus rationnelle afin de comprendre tout cela, de prototyper un nouveau projet simple avec deux cube, une animation sur l'un deux, qui vont te permettre de valider ta logique et ton code.

Bonne continuation.

Message édité le 15 septembre 2016 à 14:21:05 par Helliot_Ness
Helliot_Ness
Helliot_Ness
Niveau 5
16 septembre 2016 à 06:56:37

Re,
Après relecture je pense m'être mal exprimé !
En fait ta méthode RPC sera bien executé même si le script est désactivé et heureusement que cela fonctionne comme cela.

En fait ta méthode RPC utilise un composant Animator qui est non renseigné coté client du fait de ta condition "if (networkView.isMine == true)" présente dans le start.
Si tu fait cela doit fonctionner en principe :

void Start ()
{
  PlayerObject = transform.gameObject;
  myTransform = transform;
  ModelAnimated = myTransform.FindChild ("Swat_Animated").gameObject;
  myAnimator = ModelAnimated.GetComponent<Animator>();
  if (networkView.isMine == false)
    enabled = false;
}

Autre chose :
Sauf erreur de ma part tout ce qui touche aux RPC est devenu obscelete dans les dernières version d'Unity.

Voici un lien qui malgrès tout te permettra éventuellement de bien comprendre cet aspect réseau.
https://www.blanquet.ch/unity-networking-tutorial-en-francais/

Gaetano-GX
Gaetano-GX
Niveau 31
16 septembre 2016 à 10:56:31

Merci pour le lien Helliot_Ness, c'est justement ce qu'il me fallait !

Helliot_Ness
Helliot_Ness
Niveau 5
16 septembre 2016 à 16:43:40

De rien,
A noter quand même que depuis la version 5.1 de Unity, l'ensemble des procédures de type RPC ne devraient plus en principe être utilisées. A terme elles seront certainement supprimées.
Donc prudence...

Sous forums
  • Aide à l'achat Mac
  • Macintosh
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Internet
  • Steam Deck
  • Hardware
La vidéo du moment