Jump to content
UnitySpain
Sign in to follow this  
zopas tv

Puntuacion, gol

Recommended Posts

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

Share this post


Link to post
Share on other sites

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
	}
}

 

Share this post


Link to post
Share on other sites
7 hours ago, zopas tv said:

claro, 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.

Share this post


Link to post
Share on other sites
7 hours ago, zopas tv said:

pero 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?

Share this post


Link to post
Share on other sites
hace 10 horas, zopas tv said:

pero en other. tags lo dejo tal cual o que

 

Yo dire mas que @lightbug ... si de entrada preguntas "pero en other.tags lo dejo tal cual o que", es que para empezar no has mirado ni la documentacion oficial de Unity (teniendo en cuenta que las dos lineas que ha puesto @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.

Edited by Arthure

Share this post


Link to post
Share on other sites

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?? 

Share this post


Link to post
Share on other sites
8 hours ago, zopas tv said:

lightbug, 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

LayerCollisionMatrix.png

 

8 hours ago, zopas tv said:

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.

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.

Edited by lightbug

Share this post


Link to post
Share on other sites
8 hours ago, zopas tv said:

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

La idea es simple, decir que colisiona con que.

Share this post


Link to post
Share on other sites

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".

Share this post


Link to post
Share on other sites

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.

 

Share this post


Link to post
Share on other sites
Sign in to follow this  

×
×
  • Create New...