[MY - RS- AL]Créer un système d'attribution de role aléation (en ligne)

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
syanis94
Messages : 31
Inscription : 11 Nov 2018 16:23

[MY - RS- AL]Créer un système d'attribution de role aléation (en ligne)

Message par syanis94 » 11 Nov 2018 16:29

Bonsoir, les amis,

je suis débutant sur Unity, et je veux faire un petit système, genre quand le joueur lance le jeu (qui est multiplayer) bah il se voit attribuer un rôle au hasard (y a environ 6 rôles exemple {A, A, B, C, D, D , E , F}), mais le hic faut que chaque joueur aura un rôle spécifique à lui, pour ceux de A y a que deux rôle, le B juste un, ainsi de suite, si vous n'avez pas compris je vais vous explique encore pas de problème

Merci

Farstone
Messages : 187
Inscription : 04 Déc 2016 09:38

Re: [MY - RS- AL]Créer un système d'attribution de role aléation (en ligne)

Message par Farstone » 12 Nov 2018 10:56

Salut syanis94, est tu vraiment certain de vouloir te lancer dans le networking sans les bases de la programmation ? Il existe une multitude de moyen pour sélectionner un élément random dans un array par exemple. Quand ton code attribue un rôle aléatoire tu le blacklist tout simplement, ça peut être par la suppression direct de l’élément dans l'array (au quel cas il faudrait utiliser une list pour actualiser la taille) ou tu peux aussi utiliser un tableau à plusieurs dimension pour marquer t'es éléments "utilisé", une struct marcherait aussi, comme ça si un joueur quitte la partie tu peux remettre le rôle disponible.

syanis94
Messages : 31
Inscription : 11 Nov 2018 16:23

Re: [MY - RS- AL]Créer un système d'attribution de role aléation (en ligne)

Message par syanis94 » 12 Nov 2018 23:31

salut bro,

d'abord merci beaucoup pour votre réponse

enfaîte si je me connais pas mal en programmation, juste pour le C# Unity je découvre, donc voila, j'ai fais ce que tu venez de me dire bien avant, genre j'ai crée un array avec la liste des roles dispo, ensuite je tire au hasard un rôle et je le supprime directement ensuite, le script de tirage au sort est affecté à un objet empty dans mon level, ensuite dans un autre script qui est affecté au player je récupère le rôle grâce à une fonction évidement, tout marche parfaitement, lorsque je lance le jeu, y a un rôle attribué, mais quand je clique sur player pour voir le rôle, la variable est vide, je comprends pas pourquoi, Unity m'affiche l'erreur suivante :

Image

voici le code affecté à l'empty object :

Image

et voici enfin le code attribué a chaque player connecté :

Image

et encore merci pour votre aide

PS: moi je veux pas qu'un joueur récupère le rôle en cas de déconnexion, genre tu te déconnecte t'es mort

djulio74
Messages : 682
Inscription : 19 Déc 2009 22:55

Re: [MY - RS- AL]Créer un système d'attribution de role aléation (en ligne)

Message par djulio74 » 13 Nov 2018 08:03

Salut!
Alors je ne voit pas exactement ce qui bloque mais déjà, le "out of range", c'est qu'a un moment donné tu as choisis un rôle qui n'est plus dans la liste.

Dans ta class Role, tu n'as pas besoin de définir de variable _Role justement, vu c'est chaque joueur qui va piocher dans ce qui reste de la liste.

aussi tes class PlayerRole et Role recherche dans la la liste dans une void start, ça ne m’étonnerai pas que ton joueur soit passé en premier, avant même la déclaration de la liste de role.
Essaye :
- Supprime ta variable _Role de ta class Role ( surtout dans le start)
- dans ta classe PlayerRole, au lieu d'assigner _Role en Start, fait plutôt dans un Update un if(Input). Comme ça en plus tu pourra voir si la diminution de la liste de rôle s'effectue bien, et ce qu'il se passe s'il n'y a plus de rôles disponibles.

______________________________________________________________
\_______________________ Impossible is nothing _______________________/

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

Re: [MY - RS- AL]Créer un système d'attribution de role aléation (en ligne)

Message par Max » 13 Nov 2018 09:16

@syanis94: poste tes codes directement, avec les balises qui vont bien, plutôt que des screens. Merci.
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

syanis94
Messages : 31
Inscription : 11 Nov 2018 16:23

Re: [MY - RS- AL]Créer un système d'attribution de role aléation (en ligne)

Message par syanis94 » 13 Nov 2018 10:39

Bonjour

@djulio74, frère t un génie, ce que j'ai fais c'était con et logiquement surtout, je ne sais pas comment sa a pu m'échapper, c'est logique que lorsque le jeu se lance automatiquement il commence avec le start(), donc voila j'ai fais que vous m'aviez demandé, dès que j'appuie sur espace, j'ai un rôle attribué, a chaque fois j'appuie sur espace le rôle change, jusqu’à ce qu'il n y a plus de rôle, ce qui veut dire que mon code fonctionne parfaitement, maintenant je veux que sa se fasse automatique, c'est-à-dire sans appuyer sur espace, dès que tu rends dans le jeu, tu as ton rôle et c bon ? tu me suggères quoi ?

@Max merci votre réponse, j'ai essayé de le mettre en code mais c'était en texte brute, c'était vulgaire et moche après j'ai fais des screens

Code : Tout sélectionner

void Start () {

        _PRS = _PlayerRole.GetComponent<Role>();
        
       
	}
	
	// Update is called once per frame
	void Update () {

       if(Input.GetKeyDown(KeyCode.Space))
        _Role = _PRS.RandomRole();

    }

djulio74
Messages : 682
Inscription : 19 Déc 2009 22:55

Re: [MY - RS- AL]Créer un système d'attribution de role aléation (en ligne)

Message par djulio74 » 13 Nov 2018 11:20

tu peux remettre ta recherche de Role dans une void Start de ton PlayerRole.
par contre a la place d'une void start dans ta class Role, la remplacer par une void Awake.

Il me semble bien que l'Awake s’exécute avant les Start
Donc ton initialisation des tes rôles (list String) se fera avant la recherche de rôle de ton joueur

______________________________________________________________
\_______________________ Impossible is nothing _______________________/

syanis94
Messages : 31
Inscription : 11 Nov 2018 16:23

Re: [MY - RS- AL]Créer un système d'attribution de role aléation (en ligne)

Message par syanis94 » 13 Nov 2018 11:35

Merci beaucoup pour votre aide, c'est bon c réglé, comment j'ai fais ?

Donc le update() de class PlayerRole, j'ai crée une bool active = true
après dans l'update je vérifié si elle est true je fais le tirage de role, ensuite je rends la bool false

voici le code

PlayerRole :

Code : Tout sélectionner

using System.Collections;
using System.Collections.Generic;
using UnityEngine;


[RequireComponent(typeof(Role))]
public class PlayerRole : MonoBehaviour {

    [SerializeField]
    private GameObject _PlayerRole;

    private Role _PRS;

    [SerializeField]
    private string _Role;

	  private bool active = true;
	// Use this for initialization
	void Start () {

        _PRS = _PlayerRole.GetComponent<Role>();
      

    }
	
	// Update is called once per frame
	void Update () {  
   if(active) {
    _Role = _PRS.RandomRole();
active = false;
}

    }
}
Role

Code : Tout sélectionner

using System.Collections;
using System.Collections.Generic;
using UnityEngine;


[RequireComponent(typeof(PlayerRole))]

public class Role : MonoBehaviour
{   

    public List<string> myList = new List<string>(8);

    
    void Start()
    {
        myList = new List<string>() { "role1", "role2", "role3", "role4", "role5", "role6", "role7", "role8" };      
    }



        public string RandomRole()
        {

            int MyIndex = Random.Range(0, (myList.Count - 1));
            string _role = myList[MyIndex];
            myList.RemoveAt(MyIndex);
            return _role;
        }
   

} // public class



Répondre

Revenir vers « (C#) CSharp »