Raycasting & Disparo - Tutorial Unity3d
HTML-код
- Опубликовано: 11 фев 2025
- En este tutorial aprenderas como usar el raycasting y hacer un pequeño sistema de disparo en unity3d
····················································································
♥ Suscribete: www.youtube.co....
● Twitter: / pepegamedevelop
····················································································
►Todo el contenido de este canal es gratuito, avogo por una educación gratis y sin fronteras, puesto que el conocimiento no debe debe de ser ni es de nadie
····················································································
Pc Specs:
····················································································
● Procesador: AMD r5 1600
● Gpu: Rx 470
● Mobo: msi pro carbon b350
● Refrigeracion: Corsair H100v2
● Caja: nzxt s340 elite
Muy buen vídeo, de los pocos que lo explican bien
Para que los bloques se muevan en el mismo sentido que la bala le golpea es así:
hit.collider.GetComponent().AddForce(Camera.main.transform.forward * force);
El hit.normal cogerá la perpendicular de la superficie del cubo, no de la bala.
Creo que a todos nos gustaría que subieras más vídeos, no hay muchos con esta calidad
Estoy preparando una serie de hacer un fps, bien echo no como algunos tutoriales que he visto por ahí pero no quiero subir ningún episodio hasta tener la serie entera terminada
@@GameDevLibrary Aquí la estaremos esperando ansioso ;)
De verdad eres el puto amo. Llevaba mucho buscando un vídeo así pero no entendía nada porque los videos estaban en ruso y en inglés. Pero con este vídeo ufff like, suscrito y la campanita. De veras te aprecio mucho por tu y esfuerzo y dedicación. Bueno no tengo como agradecerte así que te dejare mi suscrision permanente. Gracias por el valioso material mi amigo.😄😃
Al fin un buen video que explica claro algo tan esencial como el Raycasting
EL PUTO AMO !!!
Llevo una semana tratando de entender lo q explicas en un solo vídeo CRACK !!!
Al fin un video explicando claro y conciso el raycasting en si y no sobre como aplicarlo a casos especificos en videos de 20 minutos xD gracias.
No se si todavía sigas leyendo comentarios de este video pero men muchas gracias me sirvió mucho era justo lo que buscaba :3
Muchas gracias tio!!!!
Te amo negro, te amooo es buenardo tu tutorial
Muchas gracias por el video me dejo claro el camino para aprender mas...ya me suscribi y di el like
Buen video!
El único que veo decente... XD
JAJAJAJJA el resto del canal estan un poco mal echos xDDD
Super bien explicado, corto y conciso. Suscrito
Gracias ;) si me pudieras. Decir que tutoriales te gustaría que subiera te lo agradecería :)
Una consulta, voy a ir variando la posicion de un objeto con un punto de referencia, y vere si hay ray casting, en funcion si hay o no obstaculo.Dichos resultados como hago para que se almacenen en un bloc note o excel?? todo consejo sera bienvenido
Hola GameDev!
Tengo una consulta:
Si quiero q una vez q disparo,haya tantos segundos de tardanza hasta el siguiente disparo,como lo hago?
Hola amigo! Busca información sobre las corrutinas de unity, y también sobre el módulo Time de unity ;)
Que video tan bueno.
alto capo makina
bien fachero
ayuda me sale esto NullReferenceException: Object reference not set to an instance of an object
rayitocontrol.OnDrawGizmos () (at Assets/scrips/rayitocontrol.cs:37)
UnityEngine.GUIUtility:ProcessEvent(Int32, IntPtr)
Buen video, seguí todos los pasos y puse todos los codigos, pero la "bala" en vez de ir en la dirección del objeto a impactar, va en la dirección de la camara, no se si me explico, sabrías por casualidad alguna manera de solicionarlo??
Gracias
9:50 pongan F en el chat
digo 9:05
La Cuarentena Me Tiene Haciendo Juegos Y Es Divertido Ya Llevo Una Semana Y Me Gusta, Mi Pregunta Es ¿ Solo Se Puede Añadir Ese Codigo A Esa Mano Con Arma O Se La Puedo Añadir A Lo Que Sea, Yo Se Lo Añadi A Mi Capsule Y Solo Se Detecta Que Pulso El Boton Izquierdo Del Mouse Y Tambien El Rayo Rojo Mas No Pasa Nada Con El Objeto Con RigiBody... Espero Me Contestes Despues Ya Que El Ultimo Comentario Fue Hace 1 Año... Saludos De Colombia
Se puede añadir a cualquiera, es raycasting una herramienta general de unity :)
@@GameDevLibrary Hey Bro Perdon Por La Molestia Pero La Solucion De Mi Problema Era Quitarle El Collider Alas Gafitas Que Tenia Mi Capsula, La Gafita Es Un Cubito Con La Escala Cambiada Jjajaja Creo Que Soy El Unico Que Le Pasan Esas Cosas...
@@fonsekoo4504 perfectoo, tienes que tener cuidado, siempre puedes usar layer masks para evitar que el rayo colisione con ciertos objetos ;)
@@GameDevLibrary Me Gusto Bastante Este Video Gracias Broo Eres El Unico Que Me Ha Respuesto De Todos Esos Canales, Seria Excelente Poner Algo Como SemiAuto Y FullAuto Ya Que Toca Presionar Para Cada Disparo... Gracias Broo :3
@@fonsekoo4504 eso es bastante facil de hacer, simplemente pon Input.GetMouseButton y le pones un contador de cadencia.
Hay un problema que no se solucionar. Cuando creas un raycast en Unity 3D y rotas el objeto lateralmente o frontalmente el rayo se mueve de su centro. No importa que pongas que inicie desde charactercontroller ().center, siempre que rote el personaje lateralmente o frontalmente el raycast se va a mover de su centro siguiendo los pies (me refiero a un raycast hacia el suelo), ¿sabes por qué se produce esto y como se puede corregir?.
Probaste con hacer un Empty GameObject y posicionarlo de donde quieras que salga el rayo, hacer este hijo del player y que en el código lo pongas como un GameObject para luego sacar de ahí mismo el orígen en el raycast? no sé si se entienda xD
Ai loviu llevava horas buscando un video y esos estaban en portugues. o solo decian el script abajo en la descripcion y no explicaban. ah da filho agora sim emtendo xD
bro cuando disparo me aparecen muchos cubos no se si esta mal pero te dejo mi codigo :
{
public float range = 10f;
public float force = 4f;
public GameObject effect;
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
if (Input.GetMouseButton(0))
{
RaycastHit hit;
if (Physics.Raycast(Camera.main.transform.position, Camera.main.transform.forward, out hit, range))
{
Debug.Log(hit.collider.name);
GameObject _effect = Instantiate(effect, hit.point, Quaternion.identity);
Destroy(_effect, 0.5f);
if (hit.collider.GetComponent() != null)
{
hit.collider.GetComponent().AddForce(hit.normal * force);
}
}
}
}
private void OnDrawGizmos()
{
Gizmos.color = Color.red;
Gizmos.DrawRay(Camera.main.transform.position, Camera.main.transform.forward * range);
}
}
PD : dime si algo esta mal
Hola, ¿Y el raycast detectaría una imagen, por ejemplo una diana?
El raycast detecta cualquier objeto que tenga un collider, si esa imagen contiene uno entonces si debería, alfinal todas las colisiones y hitbox en unity funcionan bajo el mismo principio
este scrip funciona para un juego en 3 persona?
me pegaste la gripe men :v
PD: buen video.
Gracias
Lastima que hayas dejado de hacer videos, parece buen canal, ten paciencia y se te ira llenando de suscriptores, pero pon mas material! ;D
hola
podrias ayudarme?
veo que te manejas muy bien con raycast
como puedo hacer un disparo mediante raycast pero que no sea infinitamente rapido,sino que se desplace a la velocidad de una bala real (300 m/s)?.
estoy con un proyecto y me gustaria saber,como puedo variar la velocidad de la bala,disparada con raycast.
gracias
la mejor manera de hacer una bala realista es usar un objeto bala y dispararlo, para ello te recomiendo que uses el patron de diseño object pooling, si de lo contrario buscas un sistema parecido al de csgo o call of duty puedes ver el proyecto de ejemplo shooter de unity, esta bastante bien comentado y cualquier puede entender lo que se hace
@@GameDevLibrary
Es un proyecto de curso y estoy con la duda.
Mira,yo prefiero ser sincero,y asi me soluciono problemas..
yo tengo una deficiencia psicologica,si me explico...Necesito ver como se hacen las cosas para entenderlas,no me entero solamente leyendolas,necesito saber cual es la respuesta pero tambien saber el motivo..
Es decir,saber cual seria la correcta pero entender el porque..
y el tema esque solo puedo comentar dudas al profesor,1 vez a la semana...
se me echa el tiempo encima :(.Porfavor ayuda
1- utilizando eventos de colision en lugar de raycast,lanzando el objeto bala con un rigidbody a esa velocidad.
2- lanzando un raycast de 300 metros de distancia.
3- utilizando el metodo raycastall en lugar de raycast.
4- lanzando un raycast de distancia 300* time.deltaTime y alfinal de su trayectoria repetirlo en el siguiente frame y asi sucesivamente.
@@seabluelight667 yo te diría que te decantaras por la primera opción, pero envez de hacerla instanciando y eliminando clases tipo bala, deberías hacerlo a través de un patrón de diseño llamado object pool. Cualquier duda me dices.
@@GameDevLibrary gracias compañero.
el tema es que tenia que elegir entre esas 4 opciones,porque encima el capullo del profe lo ha hecho tipo test..solamente 1 respuesta es valida.
siendo una pregunta tipo test,imagino que ira con ´´trampa´´ por eso queria preguntarte,tu manejas mejor que yo el tema
@@GameDevLibrary el tema es que de las 4 respuestas,solo 1 es la verdadera.
y por mucho que lo leo bfff no me entero
Como harías
para detener el disparo si hubiese un obstáculo?
A que te refieres?
Es decir disparas; pero si pasa algun obstaculo deja de disparar o que el rayo llegue hasta el obstaculo .
Una vez que el rayo se topa un colider no sigue se frena ahí, si quisieras que lo atravesara puedes usar el sistema de layers de unity
Gracias amigo
me gustaría saber como hago para aparezca muchos prefabs mientras presiono el botón izquierdo del mouse. porque aparece un prefab por cada click.
vale! mira es muy facil prueba usando envez de Input.GetMouseButtonDown , Input.GetMouseButton, asi aparecera mientras mantienes el boton izquierdo!
Gracias :D
Tambien sirve para disparar en realidad aumentada?
No lo he intentado nunca, pero estoy casi seguro que si.
gracias craaaack
Porque el cubo de se genera a veces se lanza a otras partes, me dijeron que podria se que el rayo podria estar pegando en el objeto instanciado
No sé exactamente a qué te refieres amigo 🤔
@@GameDevLibrary el cubo que estoy instanciando no se va al punto del hit.point, sino que varia la posicion del eje Y y Z
@@GameDevLibrary el script del raycast no se lo puse a la camara sino a un gameobject, pero el rayo funciona bien, lo unico es que el objeto instanciado esta enviando mal las coodenadas
@@JUANZ503 manda el código amigo 😂
Bro, explicas muy bien, enserio gracias
Excelente video, pero alguien sabe como añadir una trayectoria de la bala usando el raycast?
Buenas, con el raycasting eso es imposible, deberías probar soluciones como instancias un prefab dr una bala y añadirle una fuerza. Con ello consigues un disparo más realista pero consume más recursos y no es tan preciso.
El vídeo esta muy bien hecho, pero creo que deberías explicar cada cosa que haces y porque lo haces, por ejemplo cuando pones GetMouseButtonDown, explicar porque pones ese y no otro, como GetMouseButtonUp u cualquier otro, creo que eso faltó en el vídeo, pero igual lo haces muy bien, y lo digo solo como crítica constructiva, no como hater. ¡Un saludo!
Buenas tengo un video dedicado a ese asunto de los inputs, pero tienes razón intentaré especificar mas ;)
Me encanta la forma en la que explicas pero ando buscando disparos con balas o algo similar
Hola amigo, y gracias! ;) ultimamente no tengo tiempo de subir mas tutoriales pero si tienes una duda pregunta por aqui.
okidoki gracias.
cuando la bala le da al objeto, el objeto se acerca a mi.. porque? xD
XDXDXDXDX whaaaat manda el codigo q te has liao
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class RayCastController : MonoBehaviour {
public float range = 100f;
public GameObject effect;
public float Force = 100f ;
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
if (Input.GetMouseButtonDown(0))
{
RaycastHit hit;
if (Physics.Raycast(Camera.main.transform.position, Camera.main.transform.forward, out hit, range))
{
Debug.Log(hit.collider.name);
GameObject _effect = Instantiate(effect, hit.point, Quaternion.identity);
Destroy(_effect, 0.5f);
if (hit.collider.GetComponent() != null)
{
hit.collider.GetComponent().AddForce(hit.normal * Force);
}
}
}
}
private void OnDrawGizmos()
{
Gizmos.color = Color.red;
Gizmos.DrawRay(Camera.main.transform.position, Camera.main.transform.forward * range);
}
}
prueba a poner la fuerza negativa! losiento por no haber podido responder antes!
gracias! me a servido.
Una pregunta, si quiero que "Cube" se destruya si a tocado 5 veces a "Bala", como lo hago?
yo crearia otra script llamada vidacubo el cual tubiera una variable que sea la vidaobjeto, y una funcion de esta manera:
public quitarvida(float vida){
vidaobjeto -= vida;
if(vidaobjeto
*AQUI EL SCRIPT* using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class DISPARORaycast : MonoBehaviour {
public float range = 10f;
public GameObject effect;
public float fuerzaDisparo = 100;
void Start () {
}
void Update () {
if(Input.GetMouseButtonDown(0))
{
RaycastHit hit;
if(Physics.Raycast(Camera.main.transform.position,Camera.main.transform.forward, out hit, range))
{
Debug.Log (hit.collider.name);
//Instantiate (effect, hit.point, Quaternion.identity);//este igual funciona
GameObject balazo = Instantiate (effect, hit.point, Quaternion.identity);
Destroy (balazo, 5f);
//APLICA LA FUERZA AQUI
if(hit.collider.GetComponent() != null)
{
hit.collider.GetComponent ().AddForce (hit.normal * fuerzaDisparo);
}//APLICA LA FUERZA AQUI HASTA AQUI
}
}
}
private void OnDrawGizmos()
{
Gizmos.color = Color.red;
Gizmos.DrawRay (Camera.main.transform.position, Camera.main.transform.forward * range);
}
}
Separate un poco el micro porfa
lo unico malo del video es tu tragando mocos, muy molesto. El resto bien explicado.