Noticias

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

Puntuacion, gol

Iniciado por zopas tv, Noviembre 07, 2017, 08:33:24 PM

Tema anterior - Siguiente tema
estoy intentando hacer un script de puntuacion, y en verdad lo he condeguido, pero es muy simple y da lugar a errores.
 
El script es este:
 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class puntuacion : MonoBehaviour {
public static int azul = 0;
public Text Azul;
// Use this for initialization
void Start () {
   Azul.text = "Azul: " + puntuacion.azul;
}

void OnTriggerEnter(){
   puntuacion.azul++;
   Azul.text = "Azul: " + puntuacion.azul;
}
}

 
claro, al ser abierto para todos, hasta el coche puede sumar puntuacion.
 
¿Es posible hacer que solo la pelota sume puntos???
 
es que he buscado en internet y en el manual de unity pero no encuentro nada.
 
Gracias

Pon un tag a la pelota y detecta en la colisón que tag está colisionando, algo así:
 
 
 

void OnTriggerEnter(Collider other) {
if(other.tag == "Pelota")
{
   // Sumar puntuación
}
}

 
 

pero lo pongo tal cual o que
 
 

Cita de: zopas tv date=1510083204claro, al ser abierto para todos, hasta el coche puede sumar puntuacion.
   


Lo primero que tenés que hacer en todo escenario es separar por capas todo ya que son muy utiles a la hora de filtrar colisiones y por ende alivianar el código y las físicas Ej: te interesa que ciertos elementos interactuen con determinados triggers, bueno, ponelos dentro de una capa (ej "Objetos puntuacion") y utiliza la matriz de colisiones para determinar con que objetos colisionan. Una vez que tengas eso deberías de haber filtrado bastante y las colisiones (o sea el OnTriggerEnter... etc) las provocan los objetos que esperás que lo hagan. Se podría aún dar que el coche y la pelota estén intreractuando con el Trigger, entonces podes usar tags para diferenciarlos como dice @OldGuy.

pero en other. tags lo dejo tal cual o que
 
 

Cita de: zopas tv date=1510086833pero en other. tags lo dejo tal cual o que
   
   
       
   


Si de entrada andas usando tags, es porque está mal (o casi seguro vas por mal camino). Hiciste lo de la matriz?

Noviembre 08, 2017, 08:09:33 AM #6 Ultima modificación: Noviembre 08, 2017, 08:10:49 AM por Arthure
Cita de: zopas tv date=1510086833pero en other. tags lo dejo tal cual o que
   
   
       
   


Yo dire mas que @OldGuy son copia exacta, cambiando nombre de tag, de la documentacion). Y si no has mirado la documentacion de Unity, que deberia ser lo primero, llamame desconfiado pero es que me cuesta creer que hayas buscado por internet.
 
Dicho eso, permitidme hacer una observacion que para cualquiera que sea programador (y para quien no lo sea tambien) deberia ser de sentido comun ... si buscas en google cosas como "hacer script de puntuacion en unity que solo interactue con el objeto pelota y no afecte al coche" pues no vas a tener mucha suerte.
 
Pensaba que lo mas triste era intentar programar un juego sin saber programar ... pero ahora que lo pienso, intentar utilizar el buscador de internet sin saber utilizarlo es aun peor xDDD
 
Un consejo que hacia mucho que no daba: aprende programacion y veras que luego sera algo super sencillo adaptar los codigos que encuentres a tus necesidades, sin necesidad de buscar exactamente lo que tu quieres hacer por no ser capaz a modificar nada a tu gusto.

es que estoy empezando, en el manual he buscando triggers para ver si alguno servia, lon que no sabia es que habian tags y me resulta nuevo.
 
No se si lo sabes arthur, pero llevo 2 meses con esto y a parte soy muy joven, con lo que todavia no se usar perfectamente los ordenadores. 
 
lightbug, he creado un empty y le he metido los objetos que quiero que intervengan en la puntuacion(las dos porterias y la pelota) 
 
el script que mostre al principio del post(de hecho son dos, uno para la puntuacion azul y otro para la roja) los tendria que colocar en el empty?? 

Noviembre 08, 2017, 09:42:11 PM #8 Ultima modificación: Noviembre 08, 2017, 09:45:16 PM por lightbug
Cita de: zopas tv date=1510168608lightbug, he creado un empty y le he metido los objetos que quiero que intervengan en la puntuacion(las dos porterias y la pelota)
   


No es necesario crear un empty object, arriba del inspector tenés las capas para asignar. Los test de colisiones pasan por si solos, lo hace el motor de las físicas (pensalo como una gran parte de Unity que está de fondo) con su propio "step" , con todos los objetos que tengan un collider, sean hijos y padres de quien sean. Vos cuando estás sobre OnTriggerEnter significa que este motor de físicas encontró dos objetos que acaban de colisionar.
 
Con la matriz La idea es descartar estas colisiones innecesarias como primer paso (siempre viene bien), si luego tenés que diferenciarlos usá los tags o cualquier otro tipo de referencia que se te ocurra. Así se ve la matriz y está en Projects setting/physics
 

 
 
 
Cita de: zopas tv date=1510168608es que estoy empezando, en el manual he buscando triggers para ver si alguno servia, lon que no sabia es que habian tags y me resulta nuevo.
   
   
      No se si lo sabes arthur, pero llevo 2 meses con esto y a parte soy muy joven, con lo que todavia no se usar perfectamente los ordenadores.
   


No hay que saber que existen los tags, el truco de esa función es que te da el argumento que es un collider, y es el collider con el que el objeto que tiene el script colisionó Listo, problema resuelto. Donde está esto? en el manual, hasta tenés un ejemplo. Asi que, si tenes el collider con el que colisionó que podés hacer? lo más lógico (por supuesto esto es horrible, pero de momento..ojo ...) es preguntarle el nombre al gameObject que lo contiene ... sabés como acceder al nombre de un gameObject a partir de un COllider? si lo sabés no tenés más que comparar el nombre que quieras con el nombre del collider y listo, ahí tenes un método bastante feo de verificar si el collider es "ese" collider.. o no?. Y si se diera que existen 20 objetos con el mismo nombre, y el mismo tag (si comparás tags), y la cosa se complica de a poco.
 
Ahora, si esto te resulta raro esto ( argumento? collider? acceder al nombre del gameObject del collider?) debés parar. El problema no es que no sepas, pero llega un punto que vos preguntas algo básico , te contestan de una forma simple como podés arreglarlo, aún asi no entendés y volves a preguntar algo aún más basico todavía ... y podemos estar así todo el día hasta que tengas exito y funcioné, bien, hasta que mañana te surja otro problema. Todo se vuelve confuso no solo para vos sino para quien te responde porque están "desincronizados", hay una pequeña brecha "básica", la unica forma de reducir la brecha es entregarse a lo inevitable y ponerte a estudiar (si es que te interesa), lo de la edad no es excusa de nada, si tenés un cerebro alcanza, es más a tu edad es mejor todavía. Lo mejor (que me parece ya te lo dije?) es que si sabés algo (lo recontra mínimo) de Unity y C# (lo mínimo) y querés mandar mano hagas esto para arrancar y un poco medirte:
 
https://unity3d.com/es/learn/tutorials/topics/interface-essentials (básico del editor)
 
https://unity3d.com/es/learn/tutorials/s/scripting (código,)
 
https://unity3d.com/es/learn/tutorials/s/physics (físicas)
 
Toma un cuaderno, lapicera y apuntá todo. Pero no te mientas a vos mismo, en el post de la guerra moderna de siria te pregunte si sabías los items de la lista y me dijiste que sí, hace dos post atras preguntaste por el other.collider.. osea, media pila Zopas. Por lo menos al terminar tendrás una linda base.

no entiendo lo de la mariz, la ides es descartar el coche, pero  ¿como lo descarto???

Cita de: zopas tv date=1510241100no entiendo lo de la mariz, la ides es descartar el coche, pero  ¿como lo descarto???
   


La idea es simple, decir que colisiona con que.

me podrias decir que es cada item (default =       )

Cada item? ... Todo gameObject tiene una capa, si o si, defaull es una capa más (que viene en Unity, hay algunas que no podés modificar .. creo), no tiene nada diferente a las otras, aunque tengo mis dudas con "ignoreRaycast".

es que me hago un lio con esto, no se que desactivar para que el coche no colisione con la porteria...

Que es lo que no entendés? no se, estoy algo perdido, te di paso a paso como hacerlo. Tu problema (casi seguro, suponiendo que sabés usar la matriz) es que no estás separando las cosas como se debe, es un error de diseño. La portería (física, solida, que vos ves en un modelo 3D) no es lo mismo que el trigger que anota goles, o por lo menos no debería serlo. La portería no hace nada, simplemente son tres palos que colisionan con los autos o cualquier otra cosa. El trigger solamente está habilitado a colisionar con la pelota, y viceversa (unico tilde en la matriz "Trigger"-"pelota"). Pero si no ponés cada objeto en la capa que va nunca vas a lograr nada.
 
 

Etiquetas: