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

Questions à propos du scripting. Hors Shader, GUI, Audio et Mobile.
shinian
Messages : 10
Inscription : 26 Fév 2017 09:06

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

Message par shinian » 03 Mai 2017 18:30

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.
Dernière édition par shinian le 08 Mai 2017 22:27, édité 2 fois.

Avatar de l’utilisateur
evereal
Messages : 109
Inscription : 06 Nov 2015 18:46

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

Message par evereal » 04 Mai 2017 09:00

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;
“La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi. Ici, nous avons réuni théorie et pratique : Rien ne fonctionne... et personne ne sait pourquoi !”

shinian
Messages : 10
Inscription : 26 Fév 2017 09:06

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

Message par shinian » 06 Mai 2017 20:45

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(){}
}

Répondre

Revenir vers « Scripting »