[DB-RS] apparition d'un objet client avec Mirror.

Questions à propos du scripting. Hors Shader, GUI, Audio et Mobile.
Knight-HD
Messages : 5
Inscription : 14 Mai 2022 09:33

[DB-RS] apparition d'un objet client avec Mirror.

Message par Knight-HD » 14 Mai 2022 10:44

Bonjour à tous,
je dev sur Unity depuis 2 semaine et j'ai commencé avec le tuto de tower-deffense présent sur la chaîne youtube Tuto Unity FR.
je m'amuse à modifier un peux le code afin de me familiariser avec Unity et C#, j'ai également décidé d'essayer d'intégrer un multijoueur avec l'aide de l'asset Mirror et je rencontre un problème pour lequel je ne trouve pas de réponse m'aidant à régler mon souci.

j'ai réussi à syncro les vagues du serveur vers le client, j'arrive également à faire en sorte que les tourelles invoqué par l'hôte apparaissent sur le client et inversement.
mon souci c'est que quand le client fait apparaitre une tourelle il fait apparaitre celles sélectionné par le serveur et prend également l'argent sur le server.

je suis débutant et je ne souhaite pas spécialement que l'ont code à ma place, mon but est d'apprendre alors si quelqu'un peux m'envoyer dans la bonne direction et m'aider à comprendre comment faire je lui serais grandement reconnaissant.

Code : Tout sélectionner

   
   private void BuildTurret(TurretBlueprint blueprint)
    {
        if (PlayerStats.money < blueprint.cost)
        {
            //Debug.Log("Tu n'as pas d'argent" + PlayerStats.money);
            return;
        }

        PlayerStats.money -= blueprint.cost;

        turretBlueprint = blueprint;

        GameObject _turret = (GameObject)Instantiate(blueprint.prefab, GetBuildPosition(), Quaternion.identity);
        NetworkServer.Spawn(_turret);
        turret = _turret;

        GameObject effect = (GameObject)Instantiate(buildManager.buildEffect, GetBuildPosition(), Quaternion.identity);
        Destroy(effect, 1f);
    }

    
    [Command(requiresAuthority = false)]
    public void CmdBuildIt()
    {
        BuildTurret(buildManager.GetTurretToBuild());
    }

private void OnMouseDown()
    {
        if (isServer)
        {
            BuildTurret(buildManager.GetTurretToBuild());
        }
        else
        {
            CmdBuildIt();
        }
    }
    

Avatar de l’utilisateur
jmhoubre
Messages : 657
Inscription : 05 Oct 2019 22:05

Re: [DB-RS] apparition d'un objet client avec Mirror.

Message par jmhoubre » 14 Mai 2022 15:43

Bonjour,

conseils :
  • ne pas avoir les yeux plus gros que le ventre. Coder est un exercice d'humilité avant tout.
  • s'attaquer à des choses simples. Je ne pense pas que le multijoueur fasse partie de cette catégorie.
  • visionner des tutos pour apprendre à coder. La chaîne Tuto Unity Fr propose une playlist : l'as-tu parcourue ?
  • ce sujet du forum propose des ressources pour débutants.
  • n'hésite-pas à te présenter sur le sujet ad hoc : si tu as 15 ans de développement derrière toi, ce n'est pas la même chose que d'être un parfait débutant.
Pour répondre à ton problème, as-tu parcouru la doc de Mirror ? Tuto Unity Fr propose également une série sur le développement d'un FPS avec Mirror.

Knight-HD
Messages : 5
Inscription : 14 Mai 2022 09:33

Re: [DB-RS] apparition d'un objet client avec Mirror.

Message par Knight-HD » 14 Mai 2022 20:36

Merci pour ta réponse,

Oui j'ai visionné les vidéo de Tuto Unity Fr c'est d'ailleur sur la base d'un de ces tuto que j'ai fait le tower deffense.
j'ai également suivi le tuto sur mirror mais je n'ai malheureusement pas trouvé de réponse à mon problème.

j'ai parcourue la doc Mirror et cherche depuis 3 jours des réponses sur google en vain.

Knight-HD
Messages : 5
Inscription : 14 Mai 2022 09:33

Re: [DB-RS] apparition d'un objet client avec Mirror.

Message par Knight-HD » 14 Mai 2022 21:16

J'essaye de fair autrement mais au moment ou le client appel la commande pour lancer la construction de la tourelle j'ai cette erreur
Image

Code : Tout sélectionner

if (isServer)
        {
            BuildTurret(buildManager.GetTurretToBuild());
        }
        else
        {
            CmdBuildIt(buildManager.GetTurretToBuild()); // Fonction qui crée l'érreur.
        }

Knight-HD
Messages : 5
Inscription : 14 Mai 2022 09:33

Re: [DB-RS] apparition d'un objet client avec Mirror.

Message par Knight-HD » 14 Mai 2022 22:06

J'ai de nouveaux essayé de faire autrement mais je vous avoue que je ne comprend pas pourquoi j'obtiens cette erreur:
Image

Code : Tout sélectionner

CmdBuildIt(buildManager.GetTurretToBuild()); //Fonction appelé par le client

[Client]
    public void CmdBuildIt(TurretBlueprint blueprint)
    {

        if (PlayerStats.money < blueprint.cost)
        {
            //Debug.Log("Tu n'as pas d'argent" + PlayerStats.money);
            return;
        }

        PlayerStats.money -= blueprint.cost;

        turretBlueprint = blueprint;

        GameObject _turret = (GameObject)Instantiate(blueprint.prefab, GetBuildPosition(), Quaternion.identity); //tentative pour fix l'erreur
        NetworkServer.Spawn(_turret);
        BuildTurretClient(_turret); //commande qui créer l'érreur
    }
    
    [Command(requiresAuthority = false)]
    private void BuildTurretClient(GameObject _turret)
    {
        Debug.Log("je dois spawn la");
        NetworkServer.Spawn(_turret);
    }

Avatar de l’utilisateur
Max
Messages : 8614
Inscription : 30 Juil 2011 13:57
Contact :

Re: [DB-RS] apparition d'un objet client avec Mirror.

Message par Max » 15 Mai 2022 10:39

Bonjour,

c'est un warning plutôt qu'une erreur, ou tu sembles chercher à synchroniser un GameObject qui n'est pas initialisé/positionné dans ta scène.
Après perso, je n'ai aucune compétence pour tout ce qui touche à la partie réseau :mrgreen:
Image
Pas d'aide par MP, le forum est là pour ça.
En cas de doute sur les bonnes pratiques à adopter sur le forum, consulter la Charte et sa FAQ

Répondre

Revenir vers « Scripting »