Page 1 sur 1

[MY-AL] UnityEvent et Delegate pour un jeu de carte à collectionner

Publié : 29 Juil 2017 09:17
par bisonfoutu
Bonjour,

Je suis actuellement en train de travailler sur un prototype de jeu de carte à collectionner (Hearthstone, Magic...). J'ai pour l'instant programmé un éditeur de carte avec EditorWindow qui me permet de sauvegarder les cartes dans un ScriptableObject ainsi qu'un système de combat basique.
Après diverses avis que j'ai pu trouver sur des forums, j'ai vu qu'il était conseillé de faire un système de Delegates qui gèrerais les effets de toutes les cartes du jeu ainsi qu'un système d’événement pour gérer tous les événements récurrent du jeu (Quand on pose une carte, quand une carte meurt, au début du tour...). Seulement je n'avais jamais utilisé UnityEvent jusque la et n'ai donc aucune idée de la manière de mettre en place ce système malgré les nombreuses recherches que j'ai pu effectuer.

Voila les questions que je me pose :
Comment définir un nouvel événement, tel que "lorsqu'une invocation attaque" ou encore "Au début du tour de l'adversaire".
Comment stocker les effets de chaque carte de manière à ne pas devoir créer un script différents pour chaque carte?
De manière très général, comment penser l'architecture du programme?

j'ai trouvé ce lien : qui m'a permis de mieux cerner le sujet mais les bouts de codes qui s'y trouvent sont incomplet et ne me permettent pas de comprendre réellement le système qui est mis en place
https://forum.unity3d.com/threads/how-w ... me.403611/

J'ai conscience que ma question est très vague et bien entendu je n'attend pas une réponse clef en main mais simplement des pistes ou une explication des fonctionnalités que je n'arrive pas pour le moment à comprendre.

Merci de m'aider sur le sujet !

Re: [MY-AL] UnityEvent et Delegate pour un jeu de carte à collectionner

Publié : 14 Août 2017 20:28
par Greg
Bonjour,

je pense que si personne ne répond, c'est parce que oui la question est très vague...
En gros, elle revient un peu à : comment faire un système de jeu?

Et bien il y a de nombreuses façons et méthodes de faire et cela dépend de nombreux facteurs (pas que le type de jeu)

Bref, la soupe dépend du cuisinier mais par exemple pour faire simple mais pas optimisé :
using UnityEngine;

public class GameManager : MonoBehaviour
{
#region Attributes
public string turnPhase;
public bool spellActive, curseActive, invokeMonster;
#endregion

#region Unity Methods
void Update()
{
if(spellActive)
{
// Do stuff.
}

switch (turnPhase)
{
case "Starting Phase":
// Do stuff.
turnPhase = "Player Phase";
break;
case "Player Phase":
// Do stuff.

if(invokeMonster)
{
// Do stuff.
}

break;
case "Ennemi Phase":
// Do stuff.

if (invokeMonster)
{
// Do stuff.
}
break;
case "Ending Phase":
// Do stuff.
break;
}

if (curseActive)
{
// Do stuff.
}
}
#endregion
}

et pour les cartes :
using UnityEngine;

public class SpellsManager : MonoBehaviour
{
public void CardSpells(string spellType, string spellElement, int puissance)
{
if (spellType == "Magic")
{
switch (spellElement)
{
case "Earth":
switch (puissance)
{
case 1:
// Do stuff.
break;
case 2:
// Do stuff.
break;
case 3:
// Do stuff.
break;
}
break;
case "Wind":
// Do stuff.
break;
case "Fire":
// Do stuff.
break;
}
}
else
{
// Do stuff.
}
}
}
:merci: