Noticias

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

AddForce siempre en la parte Trasera aun al moverse

Iniciado por UnityDevelopersXD, Junio 03, 2016, 04:07:45 PM

Tema anterior - Siguiente tema
Hola a la comunidad, pues vengo con otro error mas y es que ya arregle todos los problemas anteriores pero al intentar disparar la bala siempre se dispara hacia una direccion.Es decir tengo el arma con un objeto bala que indica la posicion desde donde deberia aparecer la bala, sin embargo si el personaje se mueve tiene que poder disparar hacia donde quiera y pues no se como hacer para que le de un impulso al rigidbody utilizando un addforce pero que siempre el impulso se haga desde la parte trasera de la bala, asi si el personaje se mueve puede disparar hacia donde quiera.Me podrian ayudar? mas o menos que podria hacer porque lo que yo hago es esto:
 
bala.getcomponent<Rigidbody>().addforce(aqui tengo el problema ya que no se hacia donde poner la direccion,forcemode.impulse);

Junio 03, 2016, 05:00:04 PM #1 Ultima modificación: Junio 03, 2016, 05:01:32 PM por francoe1
Deberias de analizar un poco el problema.
 
1 - Dependiendo del arma, pero por lo general, un revólver dispara la munición a X velocidad, es decir, la fuerza que se aplica en la recámara para que la munición pase de tener una velocidad de movimiento de 0 a X. Quiero decir que el concepto de añadir fuerzas está mal, pero obviamente esto puede variar dependiendo el efecto que se quiera lograr.
 
2 - Conceptos basicos de fisica, la programacion de videojuegos no solo es utilizar métodos pensando que en 2 lineas vas a resolver los problemas, ¿Sí?, entonces partimos por lo más básico, las fuerzas se aplican en un Punto, con una dirección y el propio valor de la fuerza, existen factores más avanzados para la simulación como el rozamiento y otras características, pero no creo que sea necesario en este ejemplo.
 
Bien, partiendo de el sencillo análisis que acabamos de realizar podemos decir que lo necesario para efectuar el disparo es una velocidad constante y una dirección, supongamos que el Jugador tiene 3 direccion posibles, Left, Top, Right. los disparos se deben efectuar en relacion a la direccion actual del jugador.
 
Para poder realizar dicho disparo, necesitarás :
 
1 - Tomar la dirección actual del jugador, y normalizar. Verás muchas veces que en casos similares se utiliza una variable de retorno de Transform llamada forward, esta sirve, justamente para retornarlos la dirección en dirección hacia adelante del jugador, esto lo logra, gracias a un método que toma la rotación actual del jugador en relacion con uno de sus ejes, en este caso(Y), y lo convierte en un vector de dirección normalizado.
 
2 - Indicar la velocidad en la que la munición se mantendrá constante al momento del disparo. 
 
Ejemplo
 

private Transform    _player;
private float       _bulletSpeed = 10;
private void Shot()
{
     var playerDir = _player.forward; // Tomamos la direccion del Jugador
     var bullet = new GameObject().AddComponent<RigidBody>(); // Creamos un Objeto con el componente Rigidbody
bullet.velocity = playerDir * _bulletSpeed; // Asignamos la Velocidad y Direccion
}

 
Es importante entender porque se multiplica la dirección por un valor para obtener una velocidad, esto se debe a que en principio todos los vectores de dirección trabajan con valores en todos sus ejes de 1 a -1.
 
 
 
Espero que esto sirva. 
 
Descubre material como este en Mi Blog

Bien creo que he entendido dejame realizar el codigo haber si me funciona, gracias por la Info
Muchisimas gracias el codigo funcionar perfectamente, sin embar lo unico que veo es que no puedo disparar hacia arriba o abajo, esto lo haria de la misma manera pero con un up envez de un forward cierto?

El problema del disparo arriba y abajo es que supongo que estas tomado la dirección Forward del Jugador y este mismo no rota en su Eje X, esta rotación se realiza en la Cámara, entonces para un correcto funcionamiento te recomiendo tomar la dirección Forward de la cámara.

Ah ok entiendo, entonces utilizo el mismo forward para obtener la direccion hacia la que el personaje esta observando, solo que tomo la de la camara y no la del jugador, muchisimas gracias me has ayudado muchisimo eres el mejor.

Etiquetas: