Noticias

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

Puntuación doble

Iniciado por ramunda, Agosto 15, 2016, 01:54:10 PM

Tema anterior - Siguiente tema
Cita de: hammer date=1471369884vaya no sabia que existia el  CancelInvoke xD xD hahaha,bueno a ver que pasa cuando llegues, supongo que tendras que guardar el tiempo en una variable y si llega el momento cancelar el invoke y sumarle el tiempo restante al nuevo invoke
   


Si si existe hahahha, y si algo asi tendre que hacer , ya veras con lo de el texto flotante ya he conseguido que salga flotando...pero claro cuando es x2 o x3....fuuuu mira esto es lo que he echo:
 

using UnityEngine;
using System.Collections;
using UnityEngine.UI;
public class TextOnSpotScript : MonoBehaviour {
public string DisplayText;
public Text TextPrefab;
public float Speed;
public float DestroyAfter;
private float Timer;
// Use this for initialization
void Start () {
   Timer = DestroyAfter;
   TextPrefab = GetComponentInChildren<Text>();
}

// Update is called once per frame
void Update () {
   Timer -= Time.deltaTime;
   if(Timer < ) {
      Destroy(gameObject);
   }
   if(DisplayText != null) {
      TextPrefab.text = DisplayText;
   }
   if(Speed > ) {
      transform.Translate(Vector3.up * Speed * Time.deltaTime, Space.World);
   }
}
}

 
esto va de lujo le pones el valor que quieres y te lo saca flotando ...pero lo suyo seria que cojiera el valor de el ScoreValue de el objeto.....
 
 

XD Si no entiendo mal, esto es la puntuacion que sale al golpear un objeto, no???
 
Si es asi creas un prefab, y lo instancias desde el script Bumper
 

using UnityEngine;
using System.Collections;
public class Bumper : MonoBehaviour {
     public GameObject TextOnSpotGO;
public float force = 100.0f;
public float forceRadius = 1.0f;
public int scoreValue= 100;
public GameObject spotlight;
public AudioClip bumpersound;
AudioSource audio;
 
void Start ()
{
   audio = GetComponent<AudioSource> ();
}

void OnCollisionEnter()
{
   foreach(Collider col in Physics.OverlapSphere(transform.position, forceRadius))
   {
      if (col.GetComponent<Rigidbody> ())
      {  
         spotlight.SetActive (true);
         col.GetComponent<Rigidbody> ().AddExplosionForce (force, transform.position, forceRadius);
         audio.PlayOneShot (bumpersound, 0.7F);
                  
      }
      else
      {
       Invoke ("apagado",01);
      }
   }
   ScoreManager.ScoreUp(scoreValue);
        GameObject instTextOnSpotGO = Instantiate(textOnSpotGO,transform.position,Quaternion.identity)
        instTextOnSpotGO.GetComponent<TextOnSpotScript>().DisplayText = scoreValue.ToString();
}
 
void apagado()
{
   
   spotlight.SetActive (false);
}
}

Agosto 16, 2016, 08:49:57 PM #17 Ultima modificación: Agosto 16, 2016, 09:55:36 PM por ramunda
Cita de: hammer date=1471372360XD Si no entiendo mal, esto es la puntuacion que sale al golpear un objeto, no???
   
   
      Si es asi creas un prefab, y lo instancias desde el script Bumper
   
   

using UnityEngine;
using System.Collections;
public class Bumper : MonoBehaviour {
     public GameObject TextOnSpotGO;
public float force = 100.0f;
public float forceRadius = 1.0f;
public int scoreValue= 100;
public GameObject spotlight;
public AudioClip bumpersound;
AudioSource audio;
 
void Start ()
{
   audio = GetComponent<AudioSource> ();
}

void OnCollisionEnter()
{
   foreach(Collider col in Physics.OverlapSphere(transform.position, forceRadius))
   {
      if (col.GetComponent<Rigidbody> ())
      {  
         spotlight.SetActive (true);
         col.GetComponent<Rigidbody> ().AddExplosionForce (force, transform.position, forceRadius);
         audio.PlayOneShot (bumpersound, 0.7F);
                  
      }
      else
      {
       Invoke ("apagado",01);
      }
   }
   ScoreManager.ScoreUp(scoreValue);
        GameObject instTextOnSpotGO = Instantiate(textOnSpotGO,transform.position,Quaternion.identity)
        instTextOnSpotGO.GetComponent<TextOnSpotScript>().DisplayText = scoreValue.ToString();
}
 
void apagado()
{
   
   spotlight.SetActive (false);
}
}



mmm un prefab con lo que te he puesto?
 
y esto:
 
GameObject instTextOnSpotGO = Instantiate (textOnSpotGO, transform.position, Quaternion.identity);

 instTextOnSpotGO.GetComponent<TextOnSpotScript>().DisplayText = scoreValue.ToString();
 
me peta de por todos lados  Xd, detras de identity faltaba ";"
 
eso esta arreglado.
 
el fallo 1: error CS0103: The name `textOnSpotGO' does not exist in the current context( creo que dice que no encuentra dicho objeto)
 
Fallo2: error CS1502: The best overloaded method match for `UnityEngine.Object.Instantiate(UnityEngine.Object, UnityEngine.Vector3, UnityEngine.Quaternion)' has some invalid arguments
 
fallo 3: error CS1503: Argument `#1' cannot convert `object' expression to type `UnityEngine.Object'
 
jur...aver como arreglamos esto Xd
 
------------
 
Arreglado:
 

using UnityEngine;
using System.Collections;
public class Bumper : MonoBehaviour {
public float force = 100.0f;
public float forceRadius = 1.0f;
public int scoreValue= 100;
public GameObject spotlight;
public AudioClip bumpersound;
AudioSource audio;
public  GameObject TextOnSpotGO;
 

void Start ()
{
   audio = GetComponent<AudioSource> ();
   //TextOnSpotGO = GameObject.Find ("TextOnSpotGO");
}

void OnCollisionEnter()
{
   foreach(Collider col in Physics.OverlapSphere(transform.position, forceRadius))
   {
      if (col.GetComponent<Rigidbody> ())
      {  
         spotlight.SetActive (true);
         col.GetComponent<Rigidbody> ().AddExplosionForce (force, transform.position, forceRadius);
         audio.PlayOneShot (bumpersound, 0.7F);
      }
      else
      {
       Invoke ("apagado",01);
      }
   }
   ScoreManager.ScoreUp(scoreValue);
   Instantiate (TextOnSpotGO, transform.position, Quaternion.identity);
   TextOnSpotGO.GetComponent<TextOnSpotScript>().DisplayText = scoreValue.ToString();
}
 
void apagado()
{
   
   spotlight.SetActive (false);
}
}

 
pero ojo aqui solo está cogiendo las puntuaciones de el ScoreValue no de el total en caso de multiplicado...he probado esto:
 
TextOnSpotGO.GetComponent<TextOnSpotScript>().DisplayText = ScoreManager.ScoreUp(scoreValue).ToString();
 
pero no....
 
no lo acepta porque ScoreUp es un void....:(
 
 
 
 
 
 
 
 

Agosto 16, 2016, 10:06:37 PM #18 Ultima modificación: Agosto 16, 2016, 10:16:43 PM por hammer
XD Perdona lo escribo aqui sin mas y no lo pruebo en unity, asi que siempre me equivoco en algo xD XD
 
TextOnSpotGO.GetComponent<TextOnSpotScript>().DisplayText = (ScoreManager.scoreValue * ScoreManager.scorePower) + "";
 
haciendole una suma +"" a un int lo conviertes en string
 
Tambien puedes crearte una variable, hacer la multiplicacion y luego to string
 
int spotText = ScoreManager.scoreValue * ScoreManager.scorePower;
 
TextOnSpotGO.GetComponent<TextOnSpotScript>().DisplayText = spotText.ToString();
 
Incluso puede que funcione con
 
TextOnSpotGO.GetComponent<TextOnSpotScript>().DisplayText = (ScoreManager.scoreValue * ScoreManagerScorePower).ToString();
 
///edit
 
ahora que me fijo veo que has cambiado otras cosas, y veo que no lo estas entendiendo  xD
 
La idea es, a traves del inspector le asocias el prefab del x2 en TextOnSpotGO, luego instancias este prefab y lo guardas en instTextOnSpotGO para poder cambiar las variables, asi cada golpe que le de algun bumper se creara uno
 
 
 

using UnityEngine;
using System.Collections;
public class Bumper : MonoBehaviour {
     public GameObject TextOnSpotGO;
public float force = 100.0f;
public float forceRadius = 1.0f;
public int scoreValue= 100;
public GameObject spotlight;
public AudioClip bumpersound;
AudioSource audio;
 
void Start ()
{
   audio = GetComponent<AudioSource> ();
}

void OnCollisionEnter()
{
   foreach(Collider col in Physics.OverlapSphere(transform.position, forceRadius))
   {
      if (col.GetComponent<Rigidbody> ())
      {  
         spotlight.SetActive (true);
         col.GetComponent<Rigidbody> ().AddExplosionForce (force, transform.position, forceRadius);
         audio.PlayOneShot (bumpersound, 0.7F);
                  
      }
      else
      {
       Invoke ("apagado",01);
      }
   }
   ScoreManager.ScoreUp(scoreValue);
        GameObject instTextOnSpotGO = Instantiate(textOnSpotGO,transform.position,Quaternion.identity) as GameObject;
        TextOnSpotGO.GetComponent<TextOnSpotScript>().DisplayText = (ScoreManager.scoreValue * ScoreManager.scorePower) + "";
}
 
void apagado()
{
   
   spotlight.SetActive (false);
}
}

 
 
 
 
 
 

Agosto 16, 2016, 10:14:56 PM #19 Ultima modificación: Agosto 17, 2016, 01:22:43 AM por pioj
Cita de: hammer date=1471377997XD Perdona lo escribo aqui sin mas y no lo pruebo en unity, asi que siempre me equivoco en algo xD XD
   
   
      TextOnSpotGO.GetComponent<TextOnSpotScript>().DisplayText = (ScoreManager.scoreValue * ScoreManager.scorePower) + "";
   
   
      haciendole una suma +"" a un int lo conviertes en string
   
   
      Tambien puedes crearte una variable, hacer la multiplicacion y luego to string
   
   
      int spotText = ScoreManager.scoreValue * ScoreManager.scorePower;
   
   
      TextOnSpotGO.GetComponent<TextOnSpotScript>().DisplayText = spotText.ToString();
   
   
      Incluso puede que funcione con
   
   
      TextOnSpotGO.GetComponent<TextOnSpotScript>().DisplayText = (ScoreManager.scoreValue * ScoreManagerScorePower).ToString();
   
   
       
   
   
       
   


Peta todo porque....
 
scoreValue no esta en ScoreManager, esta en el valor local de el objeto...y lo estas llamando con ScoreManager.scoreValue.
 
Y nada que perdonar me lo estoy pasando de muedo hahahhaha, aprendo y me divierto..que mas puedo pedir...
 
aver como solucionamos esto Xd.
 
 
 
Despues de 3 cafes......:
 
Modificado:
 

using UnityEngine;
using System.Collections;
public class ScoreManager : MonoBehaviour
{
public static ScoreManager Instance;
void Awake()
{
Instance = this;
}
public   int score =;
public   int scorebumper =100;
public   int scoredianas =100;
public   int scoreagujeros =10000;
public   int scoretarjets =100;
public   int scorePower = 1;
public TextMesh display;
void Update()
{
   if (display)
   {
      display.text = score.ToString ("D8");
   }
}
public   void ScoreUp(int points)
{
score += (points * scorePower);
}
public   void SetScorePower(int power)
{
   scorePower = power;
}
}
 

 
He metido toda la cizalla padentro y la llamo desde el invoke:
 

ScoreManager.ScoreUp(scoreValue);
   Instantiate (TextOnSpotGO, transform.position, Quaternion.identity);
   TextOnSpotGO.GetComponent<TextOnSpotScript>().DisplayText = ScoreManager.Instance.scorebumper * ScoreManager.scorePower + "";

 
cada una por su int....
 
Ademas no vees nada raro?
 
Ya no son Public static....
 
Solo public....y sabes porque funciona asi ahora?, porque soy tonto del culo XD, he creado un singleton ya los has visto antes.
 
Bien estaba llamando a las ints asi:
 

Instantiate (TextOnSpotGO, transform.position, Quaternion.identity);
TextOnSpotGO.GetComponent<TextOnSpotScript>().DisplayText = ScoreManager.scorebumper * ScoreManager.scorePower + "";

 
y esto asi:
 

ScoreManager.Instance.ScoreUp(scoreValue);

 
pero como soy lerdo....Unity me lo decia claro , no podia acceder a una non static int...y claro yo les meti static.....pero no se me ocurrio que si lo he instanciado con el singleton....era tan facil como esto!!
 

DisplayText = ScoreManager.Instance.scorebumper * ScoreManager.Instance.scorePower + "";

 
Instance!!!!!
 
igual aquí:
 
ScoreManager.Instance.ScoreUp(scoreValue);
 
En fin....hahahhahahha soy lerdo XDDDd

Agosto 17, 2016, 01:24:07 AM #20 Ultima modificación: Agosto 17, 2016, 01:25:59 AM por pioj
Está genial que os lo paséis bien resolviendo la duda y eso, pero por favor: Recordad que esto es un foro de consultas. Centraros en preguntar o responder, no empecéis aquí un chat privado, porque el hilo se vuelve infinitamente largo y pesado de seguir...
 
Por cierto, no hace falta ir repitiendo el quote de TODO el código de nuevo, ya posteado, en cada respuesta, si no hay ningún cambio al respecto, ¿ok?  Si ese código no aporta ya nada a la conversación, no sigáis incluyéndolo en la respuesta....

Cita de: pioj date=1471389847Está genial que os lo paséis bien resolviendo la duda y eso, pero por favor: Recordad que esto es un foro de consultas. Centraros en preguntar o responder, no empecéis aquí un chat privado, porque el hilo se vuelve infinitamente largo y pesado de seguir...
   
   
      Por cierto, no hace falta ir repitiendo el quote de TODO el código de nuevo, ya posteado, en cada respuesta, si no hay ningún cambio al respecto, ¿ok?  Si ese código no aporta ya nada a la conversación, no sigáis incluyéndolo en la respuesta....
   


*pioj Tienes toda la razón, pido disculpas, se nos ha ido de las manos...esque la cosa se ha puesto tan guay que no me he dado cuenta de esto.
 
Lo dicho , pido disculpas.Ha sido culpa mía y de nadie más.
 
Hammer ha sido más que atento y simpático conmigo y pido que no se le reproche.
 
P.D : gracias por todo hammer si eso mandame un privado y pasame un skype o lo que sea si quieres seguir el hilo.
 
 
 
 
 
 

Agosto 17, 2016, 01:40:29 AM #22 Ultima modificación: Agosto 17, 2016, 03:53:01 PM por pioj
XD se nos fue de las manos xD
 
Cierto que me volvi a equivocar XD el scorevalue viene del bumper,no se por que he puesto ScoreManager,de esta forma coge cada scoreValue de su bumper,no sabia que havia que poner instance para acceder a una variable de un singleton,no se ,me parece raro
 
Seria asi,prueba sin el instance,si no, pos ponlo xD
 



   
      TextOnSpotGO.GetComponent<TextOnSpotScript>().DisplayText = ( scoreValue * ScoreManager.scorePower) + "";
   

[/quote]
 
Ya  seguimos por privado si eso.
 
Saludos!
 
 

Etiquetas: