[MY - RS- AL]Créer un système d'attribution de role aléation (en ligne)
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
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
[MY - RS- AL]Créer un système d'attribution de role aléation (en ligne)
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
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
Re: [MY - RS- AL]Créer un système d'attribution de role aléation (en ligne)
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.
Re: [MY - RS- AL]Créer un système d'attribution de role aléation (en ligne)
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 :
voici le code affecté à l'empty object :
et voici enfin le code attribué a chaque player connecté :
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
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 :
voici le code affecté à l'empty object :
et voici enfin le code attribué a chaque player connecté :
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
Re: [MY - RS- AL]Créer un système d'attribution de role aléation (en ligne)
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.
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 _______________________/
Re: [MY - RS- AL]Créer un système d'attribution de role aléation (en ligne)
@syanis94: poste tes codes directement, avec les balises qui vont bien, plutôt que des screens. Merci.
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
Re: [MY - RS- AL]Créer un système d'attribution de role aléation (en ligne)
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
@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();
}
Re: [MY - RS- AL]Créer un système d'attribution de role aléation (en ligne)
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
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 _______________________/
Re: [MY - RS- AL]Créer un système d'attribution de role aléation (en ligne)
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 :
Role
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;
}
}
}
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