En este momento estás viendo Unity, actualizando puntaje sin método de actualización

 – Unity

Unity, actualizando puntaje sin método de actualización – Unity

Unity, actualizando puntaje sin método de actualización

– UnityAssets3Free

bienvenido , por aqui Juan y hoy os traigo
nueva pregunta

Estoy tratando de actualizar diferentes puntajes bajo diferentes condiciones. Aquí, tengo 2 opciones: blue_ball coincide con blue_rectangle y blue_ball coincide con red_rectangle. Cada condición llama a su propia función para aumentar los puntos. solo funciona una vez. cuando depuro, veo que «SCORE–RED: 10» y «SCORE–BLUE: 10» no se actualiza como 10, 20, 30… siempre es 10.

Soy nuevo en C#, así que no tengo mucha experiencia con él. Agradezco si me puede mostrar una manera de solucionar esto.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Bullet : MonoBehaviour


float scoreBlue = 0;
float scoreRed = 0;

public void BlueGain()
       
    scoreBlue += 10;
    Debug.Log("SCORE--BLUE: " + scoreBlue);



public void RedGain()
         
    scoreRed += 10;
    Debug.Log("SCORE--RED: " + scoreRed);



private void OnTriggerEnter2D(Collider2D collision)

    if (gameObject.tag == "blue_ball" && collision.gameObject.tag =="blue_rectangle")
    
        BlueGain();
    
    else if (gameObject.tag == "blue" && collision.gameObject.tag == "red_blue_rectangle")
    
        RedGain();
    

    if (collision != null)
    

        Destroy(gameObject); 
        Destroy(collision.gameObject); 
    

1 respuesta 1

Esto no funciona porque esta secuencia de comandos está adjunta a un marcador (que se puede entender por el nombre de la clase) y cuando llega, incrementa las puntuaciones. scoreBlue o scoreRed. Pero el problema es que cuando hay un desencadenante y la colisión no es nula, el objeto del juego al que está adjunto este script se destruye, al igual que las puntuaciones actualizadas.

La solución es actualizar las puntuaciones en un script que no se destruya cuando ocurra la colisión. crear un guión ScoreManager.cs y agréguele el siguiente código.

public static class ScoreManager 
    public static float scoreBlue = 0;
    public static float scoreRed = 0;

Los campos de clase y estáticos se utilizan para ser accesibles globalmente en toda la escena sin necesidad de hacer referencia a ellos.

eliminar los campos scoreBlue y scoreRed en tus bala.cs mapa vial. Al aumentar la puntuación en su bala.csmodificar el código para esto

public void BlueGain()
       
    ScoreManager.scoreBlue += 10;
    Debug.Log("SCORE--BLUE: " + ScoreManager.scoreBlue);


public void RedGain()
         
    ScoreManager.scoreRed += 10;
    Debug.Log("SCORE--RED: " + ScoreManager.scoreRed);

nota: si aun no se resuelve tu pregunta por favor dejar un comentario y pronto lo podremos de nuevo , muchas gracias

eso es todo,hasta la proxima

Deja una respuesta