Page 1 sur 1

[MY-AL] Comment Rajouter un Scripts qui est stocker dans une list a un gameobject

Publié : 03 Mai 2017 18:30
par shinian
Bonjour, j'aimerai attacher a un gameobject un script qui dans une list, voici ce que je voudrais faire

Code : Tout sélectionner

//mon prefab auquel je voudrais rajouter un script au hasard
 public GameObject CardButtonPrefab;

//la liste des effect de la carte
public list<Effect> EffectCard;

//je creer une nouvelle carte
GameObject Card = Instantiate(CardButtonPrefab) as GameObject;

//ici je prend le 5 script de ma liste
Effect effectcarte = EffectCard[5];
je voudrais ajoute effectcarte en tant que script pour le gameobject Card

:!: Les balises code SVP :!:
Merci de lire la Netiquette.

Re: Comment Rajouter un Scripts qui est stocker dans une list a un gameobject

Publié : 04 Mai 2017 09:00
par evereal
Salut,

J'ai l'impression qu'entre ce que tu dis et ce que tu codes tu essayes de faire 2 choses différentes, je vais donc te donner 2 réponses.
1) Pour ajouter un script a un gameObject de façon dynamique, on utilise la méthode AddComponent.
https://docs.unity3d.com/ScriptReferenc ... onent.html
Ce qui devrai te donner

Code : Tout sélectionner

 public GameObject CardButtonPrefab;
GameObject card = Instantiate(CardButtonPrefab) as GameObject;
card.AddComponent<Effect> as Effect;
2) Si ton script tourne déjà qqpart mais qu'il a besoin d'intéragir avec ton gameObject fraichement instancié, il faut prévoir une variable GameObject dans ton script Effect

Code : Tout sélectionner

public GameObject CardButtonPrefab;
public list<Effect> EffectCard;
GameObject card = Instantiate(CardButtonPrefab) as GameObject;
Effect effectCarte = EffectCard[5];
effectCarte.maVariableGameObject = card;

Re: Comment Rajouter un Scripts qui est stocker dans une list a un gameobject

Publié : 06 Mai 2017 20:45
par shinian
non en faite j'ai des classes filles qui dérive de la classe mère Effect, et j'ai fait une public list de toutes mes classes filles, et je souhaiterai assigner a mes cartes un effets aléatoire, il faut que j'assigne un script fille tout en restant en classe mère en faisant un cast.
Mes classes filles n'ont pas de variable ou de function en plus juste un override des méthodes mère
donc en gros
list<Effect> EffectCard contient 3 classes Deal, Heal, ManaUp

Code : Tout sélectionner

public class Effect(){
public int dmg;
 public virtual void effectActive(){}
}

public class Deal : Effect(){
public int dmg = 2;
public override void effectActive(){}
}
public class Heal: Effect(){
public int dmg = 0;
public override void effectActive(){}
}
public class ManaUp: Effect(){
public int dmg = 1;
public override void effectActive(){}
}
Sinon autre questions Quand j'essaye de lire une variable a partir de ma liste mère toutes mes variables filles sont a 0

Code : Tout sélectionner

Debug.Log(EffectCard[0].dmg); // return 0 alors que ma variable est a 2 ???
Debug.Log(EffectCard[2].dmg); // return 0 alors que ma variable est a 1 ???
Edit: Probleme est reglé erreur de ma part, il ne faut pas redéclarer les variables mais faire un constructeur ou l'on assigne la variable
voici ce que sa donne en codage

Code : Tout sélectionner

public class Deal : Effect(){
	public Deal (){dmg = 2;}
	public override void effectActive(){}
}

public class Heal: Effect(){
	public Heal(){dmg = 0;}
	public override void effectActive(){}
}

public class ManaUp: Effect(){
public ManaUp(){dmg = 1;}
public override void effectActive(){}
}