Unity Spain

Post Antiguos => General (Antiguo) => Mensaje iniciado por: ecko en Noviembre 23, 2017, 12:10:14 PM

Título: Borrado de componentes antes de instanciarlos
Publicado por: ecko en Noviembre 23, 2017, 12:10:14 PM
Buenas chic@s, mi duda es si puedo borrar componentes antes de hacer un instantiate del objeto, es decir:
 



   
       
   
   
      function Start () {
          var cargarObjeto=Resources.Load("Objeto",GameObject);
          Destroy(cargarObjeto.GetComponent(NetworkIdentity),false);    
          GameObject.Instantiate(cargarObjeto,Vector3.zero, Quaternion.Euler(0,4.88,3.1416));
      }
   
   
   
   
       
   

[/quote]
 

Al hacer esto me da este error:  
 



   
       Destroying assets is not permitted to avoid data loss.
      If you really want to remove an asset use DestroyImmediate (theObject, true);
      UnityEngine.Object:Destroy(Object)
      prueba:Start() (at Assets/Scripts/prueba.js:6)
   

[/quote]
 
pero si hago DestroyImmediate(cargarObjeto.GetComponent(NetworkIdentity),true;  me borra el componente del objeto original (el de la carpeta Resources) y esto no me interesa, así que lo único que me resuelve un poco el tema es esto:
 



   
      function Start () {
          var cargarObjeto=Resources.Load("Objeto",GameObject);
          cargarObjeto.GetComponent(NetworkIdentity).enabled=false;
          cargarObjeto.GetComponent(prueba2).enabled=false;
          var objetoEquipado=GameObject.Instantiate(cargarObjeto,Vector3.zero, Quaternion.Euler(0,4.88,3.1416));
          Destroy(objetoEquipado.GetComponent(MeshRenderer));    
          Destroy(objetoEquipado.GetComponent("prueba2"));    
          cargarObjeto.GetComponent(prueba2).enabled=true;
      }
   

[/quote]
 
pero no me gustaría hacer esto ya que no es muy fiable... a alguien se le ocurre algo?
Título: Borrado de componentes antes de instanciarlos
Publicado por: francoe1 en Noviembre 23, 2017, 12:36:46 PM
No entiendo por que tendrias que usar un Prefabs con y sin NetworkIdentity, si tu problema se debe a que el juego requiere una copia local te recomiendo que hagas un nuevo prefab y elimines los componentes que no requieren.
Título: Borrado de componentes antes de instanciarlos
Publicado por: ecko en Noviembre 23, 2017, 02:59:17 PM
En tal caso como dices tendría que crear los componentes en base al original para tener los mismos parametros que el original pero creo que no deja hacer esto unity y debes crear el componente y luego ir pasandole valores...
 



   
      function Start () {
          var cargarObjeto=Resources.Load("Objeto",GameObject);
          var objetoCopia : GameObject;
          objetoCopia.addComponent(cargarObjeto.GetComponent(MeshRenderer) as MeshRenderer);
          objetoCopia.addComponent(cargarObjeto.GetComponent(MeshFilter));
          for (var child : Transform in cargarObjeto.transform) {
                  var objeto=child.gameObject;
                  objeto.transform.parent=objetoCopia.transform;
          }
          GameObject.Instantiate(objetoCopia,Vector3.zero, Quaternion.Euler(0,4.88,3.1416));
      }
   

[/quote]
 
 
Título: Borrado de componentes antes de instanciarlos
Publicado por: Igor en Noviembre 24, 2017, 03:06:41 PM
si se pueden instaciar tal cual(con valores identicos) un objeto que este en escena... o un prebab... pero cargandolo con Load estas tirando de los valores originales del objeto, si los modificas, modificas los del "original"... deverias instanciarlo, y entonces podras "borrar" componentes de la Instancia, sin que afecte al original...
 

function Start () {
   var objetoOriginal = Resources.Load("Objeto",GameObject);
   var objetoCopia = Instantiate(objetoOriginal) : GameObject;
   Destroy(objetoCopia.GetComponent(tal));//destruir el componente que quieras...
   Destroy(objetoOriginal.gameObject);//destruir el objeto de referencia
}

 
...no tengo muchos conocimientos de java, y los que tengo los tengo un poco oxidados...
 
...pero creo que asi deveria funcionar...