Unity Spain

Post Antiguos => General (Antiguo) => Mensaje iniciado por: zopas tv en Noviembre 07, 2017, 08:33:24 PM

Título: Puntuacion, gol
Publicado por: zopas tv en Noviembre 07, 2017, 08:33:24 PM
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
Título: Puntuacion, gol
Publicado por: OldGuy en Noviembre 07, 2017, 09:04:24 PM
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
}
}

 
 
Título: Puntuacion, gol
Publicado por: zopas tv en Noviembre 07, 2017, 09:12:49 PM
pero lo pongo tal cual o que
 
 
Título: Puntuacion, gol
Publicado por: lightbug en Noviembre 07, 2017, 09:31:36 PM
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.
Título: Puntuacion, gol
Publicado por: zopas tv en Noviembre 07, 2017, 09:33:53 PM
pero en other. tags lo dejo tal cual o que
 
 
Título: Puntuacion, gol
Publicado por: lightbug en Noviembre 07, 2017, 09:37:57 PM
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?
Título: Puntuacion, gol
Publicado por: Arthure en Noviembre 08, 2017, 08:09:33 AM
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.
Título: Puntuacion, gol
Publicado por: zopas tv en Noviembre 08, 2017, 08:16:48 PM
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?? 
Título: Puntuacion, gol
Publicado por: lightbug en Noviembre 08, 2017, 09:42:11 PM
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
 
(https://docs.unity3d.com/uploads/Main/LayerCollisionMatrix.png)
 
 
 
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 (https://unity3d.com/es/learn/tutorials/topics/interface-essentials) (básico del editor)
 
https://unity3d.com/es/learn/tutorials/s/scripting (https://unity3d.com/es/learn/tutorials/s/scripting) (código,)
 
https://unity3d.com/es/learn/tutorials/s/physics (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.
Título: Puntuacion, gol
Publicado por: zopas tv en Noviembre 09, 2017, 04:25:00 PM
no entiendo lo de la mariz, la ides es descartar el coche, pero  ¿como lo descarto???
Título: Puntuacion, gol
Publicado por: lightbug en Noviembre 09, 2017, 05:29:09 PM
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.
Título: Puntuacion, gol
Publicado por: zopas tv en Noviembre 09, 2017, 07:20:44 PM
me podrias decir que es cada item (default =       )
Título: Puntuacion, gol
Publicado por: lightbug en Noviembre 10, 2017, 07:15:04 PM
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".
Título: Puntuacion, gol
Publicado por: zopas tv en Noviembre 12, 2017, 02:24:00 PM
es que me hago un lio con esto, no se que desactivar para que el coche no colisione con la porteria...
Título: Puntuacion, gol
Publicado por: lightbug en Noviembre 12, 2017, 04:31:19 PM
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.
 
 
Título: Puntuacion, gol
Publicado por: zopas tv en Noviembre 13, 2017, 03:58:42 PM
 
 
vale ya he resuelto todo pero como dice lightbug, necesito usar tags por que ahora la pelota no reacciona a la colision del coche sobre ella. 
 
Como haria que reaccionara??
 
Gracias a los que me estais ayudando
Título: Puntuacion, gol
Publicado por: lightbug en Noviembre 13, 2017, 04:58:50 PM
Tildando pelota con coche?
 
La pelota debería reaccionar a todo, coche,cancha,portería, trigger de gol (sobretodo).
 
El coche debería reaccionar a todo menos al trigger
 
Separaste todo por capas? a ver, pasá lo que tenés, va a ser más rápido.
Título: Puntuacion, gol
Publicado por: zopas tv en Noviembre 13, 2017, 06:41:09 PM
tengo ademas la pelota y las porterias como puntuacion , el coche como default y el mapa como mapa
Título: Puntuacion, gol
Publicado por: lightbug en Noviembre 13, 2017, 07:30:12 PM
Cita de: zopas tv date=1510594869tengo ademas la pelota y las porterias como puntuacion
   


la razon por la que te está andando es porque pelota y portería ("puntuacion") colisionan entre si.
 
Que entendés por "portería"? la pelota no entra en la portería, entra en el trigger.
 
donde está la capa del trigger ahí?
 
Me parece que le estás dando demasiada vuelta a todo el asunto, así que te voy a dejar lo más claro posible con una de mis obras de arte:
 

 
Obivamente portería tiene su collider y no es el mismo que trigger gol, es su propio collider y tendrá la forma del arco este, será un mesh collider o un monton de box colliders o capsule colliders, lo que sea, pero no debería formar para de trigger gol para nada, son dos cosas distintas.
Título: Puntuacion, gol
Publicado por: zopas tv en Noviembre 13, 2017, 08:24:28 PM
muchas gracias  me lo has resuelto gracias