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
appliquer un script sur un objet crée dynamiquement
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
- Kaloverian
- Messages : 336
- Inscription : 10 Août 2016 03:03
Re: appliquer un script sur un objet crée dynamiquement
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 :
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 _______________________/
Re: appliquer un script sur un objet crée dynamiquement
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
- Kaloverian
- Messages : 336
- Inscription : 10 Août 2016 03:03
Re: appliquer un script sur un objet crée dynamiquement
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>)?
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*/
}
}
}