Noticias

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

Ayuda para hacer un SCORE

Iniciado por Argo214, Noviembre 12, 2015, 12:41:02 PM

Tema anterior - Siguiente tema
Buenas! Soy nuevo en esta comunidad y me gustaría que me echarais una mano con unos scripts. Tengo una escena muy sencilla donde quiero colocar un Score que vaya recogiendo puntuaciones. Se trata de que el Player, al colisionar con varios objetos ("pista"), vaya sumando puntos.Me he creado un UIText y le he aplicado este script:using UnityEngine;using System.Collections;using UnityEngine.UI; public class puntuacion : MonoBehaviour {        public int counter = 0;     Text TextoContador;         void Start () {        TextoContador = GetComponent<Text> ();         TextoContador.text = "" + counter;     }        void Update () {         TextoContador.text = "P = " + counter;         }} Y al Player le he aplicado la siguiente: using UnityEngine;
using UnityEngine.UI;
using System.Collections;

public class PuntosPistas : MonoBehaviour {

    public Text TextoContador;
    private int counter;

    
    void OnTriggerEnter(Collider other)
    {
        
        if (other.gameObject.tag == "pista"){
            other.gameObject.SetActive(false);
            
            counter +=5;
            TextoContador.text = "P = " + counter;
        }
        
    }
}
 El resultado es que el Score no refleja los puntos ganados cuando el Player llega a los objetos y siempre está en 0.Tampoco sé cómo hacer para que al llegar a cada objeto sume una cantidad distinta. O sea, que cada objeto tenga una puntuación. A ver si me podéis ayudar. Muchas gracias!!

Si el objeto lo haces publico y es de la clase Text no necesitas hacer un getcomponent<text> y simplemente lo seleccionas desde el inspector.El player en este caso tiene un contador y la clase puntuación que no se donde está tiene otro contador.No es recomendable, pero algo rápido seria en la clase puntuación hacer "static" el score:static public int contador;Luego desde la clase player, modifica el contador en el trigger asi:puntuacion.contador +=5;Lo entiendes? 



[quote author=mrpacogp" data-ipsquote-contapp="forums" data-ipsquote-contenttype="forums" data-ipsquote-contentclass="forums_Topic" data-ipsquote-contentid="34407" data-ipsquote-contentcommentid="123360">Si el objeto lo haces publico y es de la clase Text no necesitas hacer un getcomponent<text> y simplemente lo seleccionas desde el inspector.El player en este caso tiene un contador y la clase puntuación que no se donde está tiene otro contador.No es recomendable, pero algo rápido seria en la clase puntuación hacer "static" el score:static public int contador;Luego desde la clase player, modifica el contador en el trigger asi:puntuacion.contador +=5;Lo entiendes? [/quote]Pues creo que me he liado. Le aplicaba la clase "puntuacion" al UIText donde está el contador de puntos y estoy viendo que con aplicar sólo la segunda (PuntosPistas) al Player parece que me funciona, aunque no sé si lo estoy haciendo bien. Al final la que estoy aplicando al Player es:using UnityEngine;
using UnityEngine.UI;
using System.Collections;

public class PuntosPistas : MonoBehaviour {
    
    public Text TextoContador;
    private static int counter;
    
    void Start ()
    {
        counter = 0;
        TextoContador.text = "Puntos = " + counter;
    }

    void OnTriggerEnter(Collider other)
    {
        
        if (other.gameObject.tag == "pista"){
            other.gameObject.SetActive(false);
            
            counter = counter + 5;
            TextoContador.text = "Puntos = " + counter;
        }
            
        if (other.gameObject.tag == "pista2"){
            other.gameObject.SetActive(false);
                
            counter = counter + 10;
            TextoContador.text = "Puntos = " + counter;
        }
        
    }

Usa la clase playerprefs.setint
 
Enviado desde mi iPhone utilizando Tapatalk

Noviembre 13, 2015, 09:54:34 AM #6 Ultima modificación: Noviembre 13, 2015, 09:54:58 AM por Angelsm
[quote author=pioj" data-ipsquote-contapp="forums" data-ipsquote-contenttype="forums" data-ipsquote-contentclass="forums_Topic" data-ipsquote-contentid="34407" data-ipsquote-contentcommentid="123363">Si sólo va a haber un score, puedes hacerlo Static, sin problemas.Truconsejo: http://answers.unity3d.com/questions/200820/is-comparetag-better-than-gameobjecttag-performanc.html date=1447333127]gameobject.CompareTag es más rápido que comparar el string del tag, literalmente...[/quote]Muchas gracias. Lo voy a mirar. Cómo tengo qué hacer para que la puntuación del Score se mantenga al salir de cada escena?
[quote author=mrpacogp" data-ipsquote-contapp="forums" data-ipsquote-contenttype="forums" data-ipsquote-contentclass="forums_Topic" data-ipsquote-contentid="34407" data-ipsquote-contentcommentid="123390 date=1447357966]Usa la clase playerprefs.setint Enviado desde mi iPhone utilizando Tapatalk[/quote]Pues no me aclaro. Dónde tengo que poner esa clase? En la escena inicial en el Player? En las demás escenas? Dónde?

Usa static,  PlayerPrefs es para guardar datos una vez hemos salido de la aplicación.Te creas un script y metes tu variable puntuación.en C#public static int puntuacion;en JSpublic static var puntuacion : int;El valor de esta variable se conserva entre escenas y no es necesario que el script este en la escena.
 

FNK Games  Games Developer  -  Juegos realizados en Unity para iOS y Android



Noviembre 13, 2015, 04:50:41 PM #8 Ultima modificación: Noviembre 13, 2015, 04:51:09 PM por Angelsm
[quote author=Mantis" data-ipsquote-contapp="forums" data-ipsquote-contenttype="forums" data-ipsquote-contentclass="forums_Topic" data-ipsquote-contentid="34407" data-ipsquote-contentcommentid="123407">Usa static,  PlayerPrefs es para guardar datos una vez hemos salido de la aplicación.Te creas un script y metes tu variable puntuación.en C#public static int puntuacion;en JSpublic static var puntuacion : int;El valor de esta variable se conserva entre escenas y no es necesario que el script este en la escena.
 [/quote]He hecho lo que comentas pero el marcador sigue arrancando de cero al pasar a la segunda escena. Esta es la script del player en la escena original:using UnityEngine;
using UnityEngine.UI;
using System.Collections;

public class PuntosPistas : MonoBehaviour {
    
    public static int puntuacion;
    public Text TextoContador;
    
    void Start ()
    {
        puntuacion = 0;
        TextoContador.text = "Puntos = " + puntuacion;
    }

    void OnTriggerEnter(Collider other)
    {
        
        if (other.gameObject.tag == "pista"){
            other.gameObject.SetActive(false);
            
            puntuacion = puntuacion + 5;
            TextoContador.text = "Puntos = " + puntuacion;
        }
            
        if (other.gameObject.tag == "pista2"){
            other.gameObject.SetActive(false);
                
            puntuacion = puntuacion + 10;
            TextoContador.text = "Puntos = " + puntuacion;
        }
        
    }
}
 Y esta es la que he puesto en el player en la segunda escena: [lo mismo que en la primera pero eliminando el void Start ()]using UnityEngine;
using UnityEngine.UI;
using System.Collections;

public class PuntosPistas2 : MonoBehaviour {
    
    public static int puntuacion;
    public Text TextoContador;

    
    void OnTriggerEnter(Collider other)
    {
        
        if (other.gameObject.tag == "pista"){
            other.gameObject.SetActive(false);
            
            puntuacion = puntuacion + 5;
            TextoContador.text = "Puntos = " + puntuacion;
        }
        
        if (other.gameObject.tag == "pista2"){
            other.gameObject.SetActive(false);
            
            puntuacion = puntuacion + 10;
            TextoContador.text = "Puntos = " + puntuacion;
        }
        
    }

Lo estas haciendo mal.La variable static la pones en un script aparte, no en el del player, ni siquiera en la escena.Mira bien lo que estas haciendo. Cada vez que inicias una escena tu mismo eres el que pones la variable a cero: 
    void Start ()
    {
        puntuacion = 0;
        TextoContador.text = "Puntos = " + puntuacion;
    }
  

FNK Games  Games Developer  -  Juegos realizados en Unity para iOS y Android



Muchas gracias. Lo conseguí!!!! Pero ahora tengo un nuevo problema. Al llegar a los objetos consigo los puntos, pero al ir a otras escenas y luego volver a las anteriores, los objetos que me dieron puntos siguen proporcionándomelos, cuando lo que quiero es que una vez recogidos estos puntos, ya no den más. ¿Cómo puedo conseguirlo?

Etiquetas: