Noticias

¡RECUERDA QUE SI ERES UN NUEVO USUARIO, DEBES PRESENTARTE PARA PODER PUBLICAR MENSAJES! | TENEMOS CANAL OFICIAL DE TELEGRAM: t.me/unity3dspain

Ayuda con disparo, básico para tí, dificil para mi.

Iniciado por olivers, Julio 10, 2015, 09:07:53 AM

Tema anterior - Siguiente tema
HOla:
 
Este es mi segundo post, el primero fue para presentarme.
 
Estoy empezando. De momento la cosa va bastante bien. Hace montón de años me dedicaba a programación, ahora estoy algo oxidado pero algo de base tengo. Con JavaScript nunca trabajé. Yo soy de la generación del Cobol, Pascal, Visual Basic...........
 
He conseguido un pack de fps con animación. Con animaciones de retroceso de arma (al pulsar botón izquierdo), recarga (al pulsar "r"), que sí está recargando no se puede disparar..........lleva sus dos manos y sus dos brazos que tienen animación.
 
Luego no consigo añadir al script de todas estas animaciones, el código de que salgan las balas disparadas desde la pistola.


Lo que yo entiendo es que creé un gameobject vacío (llamado lanzador), en cañón de la pistola donde instanciar las balas y salieran disparadas las balas. Pues, en pocas palabras, quisiera decir en el script que las balas salieran desde este origen, el gameobject vacío. Si pongo el código, las balas salen desde (digamos) los brazos del jugador.
 
Los dos scripts por separado funcionan. Claro está que un script está para el arma (y sus brazos) y el otro script, el de disparar, está en el game object vacío.


En un principio así funciona bien. Pero, claro, si le quiero añadir contador de balas y más cosas ya no sé donde poner el código, si en el arma o en el script vacio.
 
En pocas palabras, un script, o instrucción para decir en el script de las animaciones que las balas queden instanciadas en el objeto vacio.
 
Otra cosa. Como puedo borrar la bala, teniendo en cuenta que la variable bala es un "transform" no es un "game object"??, entonces la instrucción Destroy gameobject me da error.
 
¿es necesario eliminar las balas? O hay suficiente memoria para que no ocurra nada.
 
Bueno, creo que para se el segundo post me he excedido bastante, espero que me lo perdones.
 
Gracias.

Si la bala es un Transform simplemented haz     bala.position = elGameObjectVacio.position;         al instanciar la bala. Con eso ya solucionarias lo de la posicion.
 
Para borrar la bala (es necesario borrarla) puedes usar .gameObject el cual se refiere al objeto que tiene el componente, es decir Destroy(bala.gameObject);

Julio 10, 2015, 09:35:23 AM #2 Ultima modificación: Julio 10, 2015, 10:38:01 AM por olivers
Muchas gracias Jose
 
Pero...... ¿me podrías dar la instrucción entera? Por favor
 
puede ser la instrucción es:  instantiate ( original, position, rotation).......esto son los parámetros.
 
Entonces el código: function fuego()
var balainstanciada = Instantiate (bala, bala.position, Quaternion.identity);
                  balainstanciada.rigidbody.AddForce(transform.forward*fuerzabala);
}
 
 
Donde:
bala es la bala en sí, 
bala.position es el game.object vacio. 
fuerza bala, es la fuerza
 
¿puede ser algo así??
 
 
 
Y lo de la bala de destruir creo que tendría que destruir no la bala, sino la bala instanciada ¿no?
Y más o menos así:...... Destroy (balainstanciada.gameObject);
 
Gracias.

si asi seria. Si tienes algun otro problema ponlo aqui y te ayudo

Hola Olivers, si te sirve en C# te puedo dar un ejemplo que consegui hacer funcionar jajjaa , por si te sirve de ayuda.
 
Yo cree un gameobject vacio.
 
Dentro le puse el script de disparar , de recarga y todo eso en 1
 
solo tienes que ir jugando despues con el gameobject rotandolo y tal hasta que veas que la bala sale a tu gusto en la direccion deseada.
 
El gameobject lo pones en la boca de el arma no dentro simplemente delante por si le quieres poner un efecto tipo muzzle osea destello etc ...
 
 
en fin aqui el codigo donde destruio la bala
 
un saludote!!

Rigidbody clone;
   clone=Instantiate(Bala, transform.position, transform.rotation) as Rigidbody;
   clone.velocity = transform.TransformDirection(Vector3.forward * 400);
   municion -= 1;
         Destroy (clone,1.0f);

Gracias amigos. Este finde lo pruebo y comentó.

Cita de: olivers date=1436540821Gracias amigos. Este finde lo pruebo y comentó.
 
Ya nos contaras

Julio 11, 2015, 05:18:09 PM #7 Ultima modificación: Julio 11, 2015, 05:18:48 PM por olivers
***** SOLUCIONADO **********
 
Para instanciar el punto de origen de la bala, la recámara, por llamarlo así, desde donde sale la bala. Pues es lo que me dijo el compañero.
 
Variable lanzador tipo gameobject. Que es el famoso gameobject
vacio donde va la bala. Y se posiciona así, justo después de pulsar el Fire1

var balaInstanciada : Rigidbody = Instantiate(bala, lanzador.position, transform.rotation );

Ya está solucionado.
 
Y para destruir la bala, pasado un tiempo se hace un script que va al prefab de la bala, que me lo he copiado por ahí.

var lifeTime = 2.0;
 
     function Awake ()
     {
 Destroy(gameObject, lifeTime);    }
 

Gracias amigos.

Cita de: olivers date=1436540821Gracias amigos. Este finde lo pruebo y comentó.
Para entender como funciona el motor de juego como unity debes tener claro la herencia de clases: http://www.google.es/#q=c+sharp+herencia+de+clases" rel="external nofollow">http://www.google.es/#q=c+sharp+herencia+de+clases
 
Los componentes, como transform, son clases. Si observas la documentacion de transform veras varios apartados:http://docs.unity3d.com/ScriptReference/Transform.html" rel="external nofollow">http://docs.unity3d.com/ScriptReference/Transform.html donde aparece inherited members, ahi encontraras la variable miembro que necesitas gameObject(es heredada de la clase Component: http://docs.unity3d.com/ScriptReference/Component.html)" rel="external nofollow">http://docs.unity3d.com/ScriptReference/Component.html)


Etiquetas: