Unity Spain

Post Antiguos => General (Antiguo) => Mensaje iniciado por: S0LXZ en Octubre 01, 2018, 06:22:43 PM

Título: problema con la instanciacion de objetos
Publicado por: S0LXZ en Octubre 01, 2018, 06:22:43 PM
buenas tengo un problema.
 
Al instanciar un zombie que hice desde blender, este coge una rotación en el eje x la cual no es la predeterminada (0). He 
 
que podría estar ocurriendo??
 
Os dejo el script del zombie por si el error esta ahí. 
 

public class Enemigo : MonoBehaviour {
private float vida = 100f;
public float velocidadMovimiento;
GameObject Player;
void Awake(){
   Player = GameObject.FindWithTag ("Player");
   
}
void Update(){
      this.transform.LookAt (this.Player.transform.position);
      this.transform.Translate (Vector3.forward * this.velocidadMovimiento * Time.deltaTime);
   if (vida <= 0f) {
      Muerte ();   
   }
}   
void Muerte(){
   Destroy (gameObject);
}
public void Vida (float amount) {
    vida -= amount;
   if (vida <= 0f) {
      Muerte ();   
   }
}
    public void sonido()
    {
    }
   
}

 
y por aquí el del instanciador
 

public class InstanciadorZombie : MonoBehaviour {
public GameObject instanciadorZombies;
public GameObject Zombie;
private int numZombiesMax = 5;
    int numZombiesMin = 0;
public float TiempoEntreZombie;
    private float TiempoUltimoZombie;
void Update(){
   Instanciador ();
   }
public void Instanciador(){
   if (numZombiesMin < numZombiesMax && Time.time - TiempoUltimoZombie >= TiempoEntreZombie) {
      Instantiate (this.Zombie, this.instanciadorZombies.transform.position, this.instanciadorZombies.transform.rotation);
      numZombiesMin++;
      TiempoUltimoZombie = Time.time;
      if (numZombiesMin == numZombiesMax) {
         Invoke ("MasZombies", 20f);
      }
   }
}
public void MasZombies(){
   numZombiesMax = numZombiesMax + 5;
}
}

 
Gracias
Título: problema con la instanciacion de objetos
Publicado por: lightbug en Octubre 01, 2018, 08:45:55 PM
Ya probaste de ponerlo manualmente en la escena y que esté bien orientado ? ... por bien orientado me refiero a que el objeto padre (generalmente uno vacío) sea congruente con el hijo (generalmente el modelo o jerarquías del modelo). 1 ) Si esto está bien la estás cagando en el código, además revisá que "instanciador zombi" tenga la rotación que deseas,.2) Si esto está mal es un problema de importanción del modelo (probablemente, de blender siempre tuve uno o dos problemitas con los modelos).
Título: problema con la instanciacion de objetos
Publicado por: S0LXZ en Octubre 02, 2018, 03:35:52 PM
esta todo correcto en la escena. tiene la rotación de 0
 
 
 
pero sigue sin funcionar
Título: problema con la instanciacion de objetos
Publicado por: Igor en Octubre 02, 2018, 10:46:43 PM

Instantiate(zombi, transform.position, new Quaternion());
//new Quaternion te crea una rotacion "standard", oses, en eulers seria (0,0,0)
//tambien puedes rotarlos a mano:
GameObject nuevoZombie = (GameObject)Instantiate(zombie, pos, rot));
nuevoZombie.transform.eulerAngles = new Vector3(0,0,0);
//.....o rotacion random en el eje Y...
nuevoZombie.transform.eulerAngles = new Vector3(0,Random.Range(0f,360f),0);

 
 
Título: problema con la instanciacion de objetos
Publicado por: S0LXZ en Octubre 03, 2018, 03:57:06 PM
ya se cual es el problema.
 
El fallo esta en cuando le digo al objeto que tiene que mirar al player, este no se porque pero coge una rotación y cuanto mas cerca esta el player del objeto mas rota en x.
 
he probado a darle la rotación, a congelar las rotaciones con el rigidbody y no se que hacer...
Título: problema con la instanciacion de objetos
Publicado por: lightbug en Octubre 03, 2018, 06:13:58 PM
Cita de: S0LXZ date=1538575026ya se cual es el problema.
   
   
      El fallo esta en cuando le digo al objeto que tiene que mirar al player, este no se porque pero coge una rotación y cuanto mas cerca esta el player del objeto mas rota en x.
   
   
      he probado a darle la rotación, a congelar las rotaciones con el rigidbody y no se que hacer...
   


dale que mire al player, seguro usas LookAt, luego en la línea que sigue anula o impone el valor que quieras en un eje de rotación.
 

pepe.transform.LookAt(player);
pepe.transform.rotation = new Vector3( 0 , pepe.transform.rotation.y , pepe.transform.rotation.z /* o cero si da */ );

 
 
Título: problema con la instanciacion de objetos
Publicado por: S0LXZ en Octubre 03, 2018, 08:17:51 PM
no puedo poner un vector 3 en rotación. 
Título: problema con la instanciacion de objetos
Publicado por: lightbug en Octubre 04, 2018, 12:09:33 AM
Cita de: S0LXZ date=1538590671no puedo poner un vector 3 en rotación. 
   


XD sí, se me escapó, bueno me entendés ... ;)   Ponelo en eulerAngles y listo, o usa las herramientas de quaternion para hacer la traducción de uno a otro.
Título: problema con la instanciacion de objetos
Publicado por: S0LXZ en Octubre 04, 2018, 02:43:48 PM
si XD no importa ya lo hice pero ahora no siguen al player
Título: problema con la instanciacion de objetos
Publicado por: S0LXZ en Octubre 04, 2018, 06:26:40 PM
lo que creo que esta pasando es que al anular la rotación del zombie ya deja de mirar al player  ¿¿como podría solo congelar el angulo de rotación x??
Título: problema con la instanciacion de objetos
Publicado por: S0LXZ en Octubre 05, 2018, 04:58:50 PM
me podeis ayudar, no encuentro nada en internet
 
 
Título: problema con la instanciacion de objetos
Publicado por: lightbug en Octubre 05, 2018, 06:53:32 PM
Cita de: S0LXZ date=1538670400¿¿como podría solo congelar el angulo de rotación x??
   


te lo puse arriba, estoy imponiendo eulerAngle.x = 0
Título: problema con la instanciacion de objetos
Publicado por: S0LXZ en Octubre 05, 2018, 10:44:11 PM
pero lo que eso hace es dejar de mirar al player
 
 
Título: problema con la instanciacion de objetos
Publicado por: S0LXZ en Octubre 06, 2018, 11:08:37 PM
no tengo ni idea de que hacer...  me podeis ayudar es que no paro de darle vueltas y os lo agradeceria
 
 
Título: problema con la instanciacion de objetos
Publicado por: S0LXZ en Octubre 07, 2018, 11:10:13 AM
Cita de: lightbug date=1538758412te lo puse arriba, estoy imponiendo eulerAngle.x = 0
   


vale, al ponerlo funciona, pone que rota pero no es asi, es decir, en el apartado de transform (en el inspector) los numeros del eje Y cambian en función el player se mueve y el eje x ya no supone un problema, pero aunque en el inspector funcione, el zombie no rota de manera visible y no persigue al player
Título: problema con la instanciacion de objetos
Publicado por: lightbug en Octubre 07, 2018, 02:47:03 PM
Cita de: S0LXZ date=1538903413vale, al ponerlo funciona, pone que rota pero no es asi, es decir, en el apartado de transform (en el inspector) los numeros del eje Y cambian en función el player se mueve y el eje x ya no supone un problema, pero aunque en el inspector funcione, el zombie no rota de manera visible y no persigue al player
   


Rota pero no rota? Podrias subir una imagen con la jerarquía q usas, cualquier cosa q sume, porq el procedimiento es muy simple, si no te anda debe ser por algo más
Título: problema con la instanciacion de objetos
Publicado por: Igor en Octubre 07, 2018, 03:02:07 PM
creo que podria ser un problema de gerarquias... estas rotando el objeto equivocado.... o tambien podria ser la orientacion del objeto... cuando el zombie esta de pie en el escenario su angulo X es cero? como dice @lightbug unas imagenes ayudarian a ver de donde puede venir el problema...
 
las gerarquias... el inspector del zombi...
Título: problema con la instanciacion de objetos
Publicado por: S0LXZ en Octubre 07, 2018, 05:22:06 PM
parece que si rota pero rota muy poco 
este es el inspector del zombie, mirad como no esta mirando al player pero cada vez que se aleja rota un poco mas pero muy poco
Título: problema con la instanciacion de objetos
Publicado por: Igor en Octubre 07, 2018, 07:01:21 PM
nose... 
 
todo parece bien... prueba a poner algo asi:
 

oldRot = transform.rotation;
transform.LookAt(player.transform.position);
transform.rotation = Quaternion.Lerp(oldRot, transform.rotation, 0.1f);

 
...igual en vez de usar la posicion del player usa un new vector3 con la "Y" del enemigo...
 

new Vector3(player.transform.position.x, transform.position.y, player.transform.plsition.z);

 
asi dara igual que esten a diferente altura...
Título: problema con la instanciacion de objetos
Publicado por: S0LXZ en Octubre 07, 2018, 07:43:44 PM
y ese oldRot como lo incluyo??
Título: problema con la instanciacion de objetos
Publicado por: S0LXZ en Octubre 07, 2018, 10:51:50 PM
no puedo poner el oldRot en ninguna parte y lo otro no va
 
 
Título: problema con la instanciacion de objetos
Publicado por: debug en Octubre 08, 2018, 09:01:32 AM
No parece ser problema de código, parece más problema de pivote en la malla. Prueba a usar un cubo como enemigo, con una textura que permita determinar la cara delantera.
 
O sino sube el proyecto para que lo descarguemos y probar.
Título: problema con la instanciacion de objetos
Publicado por: Igor en Octubre 08, 2018, 10:35:58 AM
 
 
Cita de: S0LXZ date=1538934224y ese oldRot como lo incluyo??
   


 
 
seria asi:
 

Quaternion oldRot = transform.rotation;
Vector3 playerPosXZ = new vector3(player.position.x, transform.position.y, player.posotion.z);
transform.LookAt(playerPosXZ);
transform.rotation = Quaternion.Lerp(oldRot, transform.rotation, 0.1f);

 
 
Título: problema con la instanciacion de objetos
Publicado por: S0LXZ en Octubre 08, 2018, 11:34:27 AM
Cita de: debug date=1538982092
Cita de: Igor date=1538987758 
         
         
             
         
         
            seria asi:
         
         

 
Quaternion oldRot = transform.rotation;
Vector3 playerPosXZ = new vector3(player.position.x, transform.position.y, player.posotion.z);
transform.LookAt(playerPosXZ);
transform.rotation = Quaternion.Lerp(oldRot, transform.rotation, 0.1f);

         
             
         
      
   

      No parece ser problema de código, parece más problema de pivote en la malla. Prueba a usar un cubo como enemigo, con una textura que permita determinar la cara delantera.
   
   
      O sino sube el proyecto para que lo descarguemos y probar.
   


muchísimas gracias eso es lo que me funciona, os agradezco a todos el haberme ayudado
Título: problema con la instanciacion de objetos
Publicado por: S0LXZ en Octubre 08, 2018, 08:22:01 PM
una pregunta mas, es que es mi primer proyecto completo y me esta ocurriendo un problema con los sonidos.
 
El sonido se reproduce cuando muevo el player pero solo una vez, es decir que cuando mantengo la tecla de caminar no suena, pero si la aprieto y la suelto si que se reproduce
 

if (Input.GetAxisRaw("Vertical") != 0)
   {
            this.transform.GetComponent<AudioSource>().Play();
            this.transform.Translate (-Vector3.forward * this.velocidadMovimiento * Input.GetAxisRaw ("Vertical") * Time.deltaTime); // Hacia delante  
        }
   if (Input.GetAxisRaw("Horizontal") != 0)
   {
            this.transform.GetComponent<AudioSource>().Play();
            this.transform.Translate (-Vector3.right * this.velocidadMovimientoHorizontal * Input.GetAxisRaw("Horizontal") * Time.deltaTime); // Hacia los lados
   }

 
 
Título: problema con la instanciacion de objetos
Publicado por: lightbug en Octubre 08, 2018, 09:16:22 PM
Cita de: S0LXZ date=1539022921El sonido se reproduce cuando muevo el player pero solo una vez, es decir que cuando mantengo la tecla de caminar no suena, pero si la aprieto y la suelto si que se reproduce
   


No creo que no se reproduzca, me parece que se está re-reproduciendo > 60 veces por segundos y claro no te das cuenta de esto por oido (si usaras PlayOnce o algo así se dispararían muchas reproducciones a la vez, con Play no ocurre). Podés hacer que si no se está reproduciendo se reproduzca (dejalo NO en loop). Fijate en la parte de audio "isPlaying" del manual.
Título: problema con la instanciacion de objetos
Publicado por: S0LXZ en Octubre 09, 2018, 03:51:42 PM
he probado con lo de isPlaying pero no funciona, podría ser porque el clip duramas de 1 seg??
 
 
Título: problema con la instanciacion de objetos
Publicado por: Igor en Octubre 09, 2018, 08:13:02 PM

//primero declaras en la class:
private float soundTimer = 0f;
 
//y donde haces sonar el sonido pones:
soundTimer += Time.deltatime;
if (soundTimer > 0.5f) {//pon el tiempo que quieras
   soundTimer = 0;
   sonido.Play();
   //...o como se llame te audioSource...
}

 
esto es para que suene cada 0.5 segundos (supongo que seran "pisadas")
Título: problema con la instanciacion de objetos
Publicado por: S0LXZ en Octubre 09, 2018, 08:58:29 PM
muchas gracias