No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

Convierte tus certificados en títulos universitarios en USA

Antes: $249

Currency
$209

Paga en 4 cuotas sin intereses

Paga en 4 cuotas sin intereses
Suscríbete

Termina en:

17 Días
13 Hrs
44 Min
43 Seg

Creación de un proyectil

13/41
Recursos

Aportes 11

Preguntas 7

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Vamo a ver si entendi:
Paso 1
Obtenemos el angulo actual de la mira en radianes por medio del arcotangente o bien atan

Paso 2
Seguimos a crear una variable encargada de manejar la quaternion en la que instanciaremos al objeto con el metodo Quaternion.AngleAxis() El cual recibe como parametro la rotación que deseamos realizar y el eje en el cual se hara la rotación, en este caso Vector3.Forward(0,0,1) es decir en el eje Z.(Este eje dependera segun el vector hacia el cual se dirija la bala, en este caso Vector3.Right)
** Paso3 **
Por ultimo instanciamos el objeto en la posición actual del player y con la quaternion que hemos obtenido en el paso anterior.

Si alguien encuentra algun error en mi razonamiento del codigo, por favor haganmelo sabes 😄

Para los que quieran saber mas sobre cosas como ese “Serialized Field”,sus nombres son atributos y pueden saber mas sobre ellos aqui:

https://learn.unity.com/tutorial/atributos?language=es&projectId=5e419552edbc2a0a62170f9c

Siento que solo está dictando código pero no explica bien para que sirven ciertas funciones(métodos). Igual investigo de la API de Unity de modo que termino entendiéndolo más o menos, pero podría explicarlo mejor.

Para hacer un gameObject de manera rápida, utilizamos los prefabs y además tenemos que usar la función Instantiate, para que tome forma en el juego.

Todo GameObject, que se mueva a una carpeta dentro del proyecto, será un Prefab.

Genial

Si cambias GetMouseButton por GetMouseButtonDown ya dispara una sola bala.
Aunque con el GetMouseButton ya puedes hacer una lluvia de balas en todas direcciones.

Sino entienden para que sirve una variable cualquier cosa les recomiendo que le pregunten a chat gpt y l es da la definición

se aorende mucho

Dispare mucho y se me crasheo :C

Me costo muchisimo entender el ultimo condicional, asi que me pase un ratito para entender, se los paso por si alguno estuvo igual de perdido que yo

Nuevo sprite, reseteamos transform y creamos un script bullet
serializamos un campo con un float llamado speed y ponemos esto en update()

 transform.position += transform.right * Time.deltaTime * speed;

Hacemos (si no existe) la carpeta de prefabs y arrastramos el objeto bullet a la misma.
Agreagamos esto a el script player

    [SerializeField] Transform bulletPrefab

Y desde el inspector arrastramos el prefab (de la carpeta prefab no de la jerarquia) a el campo que creamos

En el script Player agregamos

if (Input.GetMouseButton(0)){
            Instantiate(bulletPrefab, transform.position, Quaternion.identity);
}

Input.GetMouseButton(), Toma como entrada el boton izquierdo del mouse si argumentamos 0 y el derecho si argumentamos 1.
Instantiate(), Crea un objeto que pasemos como parametro, ademas de especificar su posicion.
Quaternion sirven para representar rotaciones. identity hace que la rotacion sea 0.
Es decir, con este if hacemos que una bala se instancie en la posicion del jugador al apretar click izquierdo.

  • Momento de sacar la rotacion para que dispare en direccion correcta.
    Para esto necesitamos sacar el angulo entre el jugador y la mira, el script queda asi
if (Input.GetMouseButton(0)){
       float angle = Mathf.Atan2(facingDirection.y, facingDirection.x) * Mathf.Rad2Deg;
       Quaternion targetRotation = Quaternion.AngleAxis(angle, Vector3.forward);
       Instantiate(bulletPrefab, transform.position, targetRotation);
 }
  • Mathf.Atan2() lo que hace es ubicar en un eje cartesiano las dos DIRECCIONES que le pasemos por parametro (x e y) y de ahí saca el angulo entre la trayectoria y el eje x.
    Atan2 nos entrega este angulo en radianes (expresion matematica para angulos).
    NOTA: Para que Antan2 funcione necesita que el sprite del prefab este mirando hacia la derecha.

  • Mathf.Rad2Deg convierte el numero radian a angulo de euler, que es el que usa el trnasform.

  • Quaternion.AngleAxis(float angulo, Vector3.direccion) crea una rotacion, por parametro pasamos el angulo como float (el que hicimos recien) y un vector3 indicando la direccion.