Noticias

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

Temas recientes

Disparo con ángulos

Iniciado por Kari, Noviembre 22, 2019, 04:35:50 AM

Tema anterior - Siguiente tema
Hola, he estado  trabajando en una nave que rota su posición con el mouse, y debe disparar con el click.
 
Este es el código del mouse:
 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class SeguirMouse : MonoBehaviour {
void Start () {
   
}

void Update () {
   Seguir ();
}
public void Seguir() {
   Vector3 mousePos = Input.mousePosition;
   mousePos = Camera.main.ScreenToWorldPoint (mousePos);
   Vector2 direction = new Vector2 (
                          mousePos.x - transform.position.x,
                          mousePos.y - transform.position.y
                       );
   transform.up = direction;
}

 
Y este el de la instation de las balas
 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Shoot : MonoBehaviour {
public GameObject bulletPrefab;
public Transform bulletSpawner;
public void PlayerShooting(){
   if(Input.GetButtonDown ("Fire1")){
      Instantiate (bulletPrefab,new Vector2(bulletSpawner.position.x,bulletSpawner.position.y),bulletSpawner.rotation);
   }
}

void Update () {
   PlayerShooting ();
}
}

 
¿Saben si hay algún modo de que dispare con un velocidad dada en la dirección que el mouse apunta? He estado buscando tutoriales y ayuda pero solo he encontrado para disparar con una direccion fija. Gracias, los quiero muxo.

Noviembre 22, 2019, 09:55:32 AM #1 Ultima modificación: Noviembre 22, 2019, 09:55:52 AM por Igor
al instanciar las balas has puesto que tomen la rotacion del bulletSpawner, osea que deberian aparecer rotadas en la misma direccion que el.
 
no se si el bullerSpawner rota con la nave.
 
otra cosa: en el script "seguirMouse" al final pones el "up" igual a la direcion... no se si eso esta bien... para que un objeto mire hacia un punto existe la funcion "LookAt(punto)"
 
otra cosa mas: en ambos scripts usas vector2 en vez de vector3, no se si vector2 vale ahi. ....la nave rota (gira) bien? la bala se instancia donde debe?

Noviembre 22, 2019, 01:38:58 PM #2 Ultima modificación: Noviembre 22, 2019, 01:39:43 PM por Deaymon
Perdón por salirme del tema pero, ¿la línea "transform.up = direction" de verdad funciona? xD ¿La nave sigue el mouse con ese método? Suena como una alternativa bastante peculiar.
 
Volviendo al tema, para hacer que la bala se mueva en una cierta dirección, lo único que te faltaría sería añadir al prefab de la bala el componente Rigidbody (o Rigidbody2D si usas Physics2D) y un script a la bala tipo:
 

// Aquí asignas el Rigidbody2D del propio prefab
public Rigidbody2D rb;
public float velocidadDisparo;
private void Awake() {
rb.velocity = transform.up * velocidadDisparo // a lo mejor en lugar de transform.up tiene que ser transform.forward o transform.right dependiendo de cómo quieras orientar el objeto
}

 
La bala se moverá constantemente con la velocidad y dirección que le asignes hasta que choque con algo o se le aplique alguna fuerza.
 
Otra alternativa sería ponerle un Update() que haga que se mueva a cada frame en la dirección que veas, pero no estoy seguro de cómo afectará eso a las colisiones.

Cita de: Deaymon date=1574426338Perdón por salirme del tema pero, ¿la línea "transform.up = direction" de verdad funciona? xD ¿La nave sigue el mouse con ese método? Suena como una alternativa bastante peculiar.
   
   
      Volviendo al tema, para hacer que la bala se mueva en una cierta dirección, lo único que te faltaría sería añadir al prefab de la bala el componente Rigidbody (o Rigidbody2D si usas Physics2D) y un script a la bala tipo:
   
   

// Aquí asignas el Rigidbody2D del propio prefab
public Rigidbody2D rb;
public float velocidadDisparo;
private void Awake() {
rb.velocity = transform.up * velocidadDisparo // a lo mejor en lugar de transform.up tiene que ser transform.forward o transform.right dependiendo de cómo quieras orientar el objeto
}

   
      La bala se moverá constantemente con la velocidad y dirección que le asignes hasta que choque con algo o se le aplique alguna fuerza.
   
   
      Otra alternativa sería ponerle un Update() que haga que se mueva a cada frame en la dirección que veas, pero no estoy seguro de cómo afectará eso a las colisiones.
   


Gracias! Si me funcionó! Solamente que le acertaste con lo del mouse, no lo sigue con mucha exactitud. Ya vere como lo arreglo. :)

Etiquetas: