appliquer un script sur un objet crée dynamiquement

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
Avatar de l’utilisateur
Kaloverian
Messages : 336
Inscription : 10 Août 2016 03:03

appliquer un script sur un objet crée dynamiquement

Message par Kaloverian » 13 Mars 2020 01:17

bonjour,

Comme il y a quelque chose que je n'arrive pas à faire avec Instantiate,je préfère générer un objet de manière dynamique:

GameObject spawn= new GameObject ("spawn")

Il apparaît alors dans le hierarchy l'objet spawn mais seulement pourvu de la composante Transform.

1)Quoi rajouter dans le script pour que l'objet spawn généré de cette façon soit automatiquement pourvu d'une composante prédéfinie?

2)même question si la composante prédéfinie est un script avec un fichier script déjà présent dans l'Assets

3)enfin même question pour attribuer à l'objet spawn les mêmes composantes contenant les même valeurs d'un objet A déjà existant dans le hierarchy?

merci de votre aide

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

Re: appliquer un script sur un objet crée dynamiquement

Message par djulio74 » 13 Mars 2020 07:53

Salut,
Alors si tu veux générer un objet avec les mêmes composant qu'un autre existant, justement "instantiate" est fait pour ça.

je pense que ta requête devrait plutôt être de demander de l'aide sur instantiate, le pourquoi tu n'y arrive pas, nan?
Mais pour ce que tu demande :
- si tu crée un gameobject dynamiquement, il faut lui ajouter des component avec AddComponent, et renseigner les infos des component. exemple : si tu lui ajoute un meshcollider, faut renseigner le mesh, si tu assigne un renderer, assigner au moins le material.. etc.

encore une fois, ça peut etre fastidieux surtout si c'est juste pour dupliquer un object existant. C'est quoi qui te bloque avec Instantiate?

exemple de bout de script pour créer un objet, avec un mesh crée procéduralement :

Code : Tout sélectionner

	GameObject GO = new GameObject ();
	GO.tag = "parcel";
	GO.transform.position = CenterZone [i];// Vector3.zero;
	GO.transform.parent = PARCEL.transform;
	GO.transform.eulerAngles = transform.eulerAngles;
	GO.name = "parcel " + i + "LOD_1";
	GO.AddComponent<MeshFilter> ();
	GO.AddComponent<MeshRenderer> ();
	GO.GetComponent<Renderer> ().material = GetComponent<Renderer> ().material;	

	meshA = GO.GetComponent<MeshFilter> ().mesh;
	meshA.vertices = Zone [i].Vertex;
	meshA.triangles = Zone [i].Tri;
	meshA.colors32 = Zone [i].Color;
	meshA.uv = Zone [i].UV;
	meshA.RecalculateNormals();

______________________________________________________________
\_______________________ Impossible is nothing _______________________/

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

Re: appliquer un script sur un objet crée dynamiquement

Message par Max » 13 Mars 2020 08:37

Bonjour,

@Kaloverian: en complément, je dirais aussi: as-tu regardé du coté des Prefabs ?
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

Avatar de l’utilisateur
Kaloverian
Messages : 336
Inscription : 10 Août 2016 03:03

Re: appliquer un script sur un objet crée dynamiquement

Message par Kaloverian » 13 Mars 2020 16:58

oui merci ça fonctionne !
mais il réside un autre problème très simple:
Quelle instruction précise à mettre où c'est vert pour non pas rajouter une composante mais ajouter seulement une valeur(ici ObjectList[p] du champ(ici Spawn2) de la composante (ajoutée précédemment grâce à AddComponent.<nom_script>)?

Code : Tout sélectionner

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

public class ajout_valeur_dans_composante : MonoBehaviour
{
	int p = 0;
	public GameObject Spawn, Spawn2;
	public GameObject Objet1;
        List<GameObject> ObjectList;

	
	void Start()
	{
		ObjectList = new List<GameObject>();
	}

	void Update()
	{

	
		if (Input.GetKeyDown(KeyCode.I))
		{
			p++;
			ObjectList.Add(Objet1);
			ObjectList[p-1] = new GameObject("toto" + p);

		

			ObjectList[p-1].AddComponent<nom_script>().Spawn = ObjectList[p-1];
			/*quelle instruction pour affecter ObjectList[p] au champ Spawn2 du script<nom_script> ?
                        truc simple du genre. 
                        ObjectList[p-1]..<nom_script>().Spawn2 = ObjectList[p];
                        j'ai essayé en vain
                        ObjectList[p-1].GetComponent<nom_script>().Spawn2 = ObjectList[p];
                        mais ça ne fonctionne pas*/		
		}
	}
}


Répondre

Revenir vers « (C#) CSharp »