2017-08-30 1 views
0

Ich habe herumgegraben und versucht, die Antwort auf diese Frage zu finden, fand aber nichts. Ich versuche ein einfaches Clicker-Spiel zu entwickeln, bin aber gleich am Anfang steckengeblieben ... was nicht besonders gut ist. Was ich versuche, ist, nach einer Berührung dem Spieler Geld zu geben (momentan nur + 1 $ hinzuzufügen) und in einem Textobjekt zu spawnen, das "+ 1 $" sagt. Scheint, als ob das Objekt nicht erscheint. Ich habe auch eine "Animation" gemacht, von der ich nicht sicher bin, ob sie gut gemacht ist. Beide Klassen:Objekte, die nach der Berührung nicht instanziiert werden

public class TapTextMovement : MonoBehaviour { 

private int frameCount = 0; 
private float temp; 
public int modifier = 0; 

// Use this for initialization 
void Start() { 

} 

// Update is called once per frame 
void Update() { 
    if (frameCount < 40) { 
     temp = this.transform.position.y + 1F * modifier; 

     this.transform.position = new Vector3(this.transform.position.x, temp, this.transform.position.z); 
    } else if (frameCount < 50) { 
     temp = this.transform.position.y + 0.5F * modifier; 

     this.transform.position = new Vector3(this.transform.position.x, temp, this.transform.position.z); 
    } else if (frameCount < 55) { 
     temp = this.transform.position.y + 0.3F * modifier; 

     this.transform.position = new Vector3(this.transform.position.x, temp, this.transform.position.z); 
    } else if (frameCount < 60) { 
     temp = this.transform.position.y + 0.15F * modifier; 

     this.transform.position = new Vector3(this.transform.position.x, temp, this.transform.position.z); 
    } else { 
     Object.Destroy (this); 
    } 
    frameCount++; 
} 
} 

Und:

public class MoneyTap : MonoBehaviour { 

public GameObject money; 
private Text moneyText; 
public long moneyAmount = 0; 
public GameObject tapText; 
private Vector2 tempPos; 
private Vector3 fullPos; 

void Start() { 
    moneyText = money.GetComponent<Text>(); 
} 

// Update is called once per frame 
void Update() 
{ 
    moneyText.text = moneyAmount + "$"; 

    if (Input.touchCount > 0) { 
     if (Input.GetTouch (0).phase == TouchPhase.Began) { 

      tempPos = Input.GetTouch(0).position; 
      fullPos = new Vector3 (tempPos.x, tempPos.y, 0); 


      RaycastHit2D hitInfo = Physics2D.Raycast (Camera.main.ScreenToWorldPoint (Input.GetTouch(0).position), Vector2.zero); 
      if (hitInfo) { 
       moneyAmount++;; 
       Instantiate(tapText, fullPos, Quaternion.identity); 
      } 
     } 
    } 
} 
} 

Ich bin ein bisschen neu zu Unity so jedes bisschen Hilfe würde geschätzt! Vielen Dank!

+0

Nur ein Hinweis, erstellen Sie keine Animationen in ** Update **, da es die Leistung beeinträchtigt, wie diese Änderungen einmal pro Frame durchgeführt werden Render –

+0

Gibt es eine Alternative? Warum nicht? Ich möchte die Position jedes Frames für ein oder zwei Sekunden ändern und dann löschen. In jedem Rahmen wird das Objekt von einer Unlust angezogen, warum sollte ich das jetzt wollen? –

Antwort

1

das Objekt Gebrauch Funktion instanziiert:

GameObject go = Instantiate(tapText, fullPos, Quaternion.identity) as GameObject; 

Auch schaffen keine Animation in einem Update, da dies zu Problemen führt und die Leistung auswirken.

Es könnte ein Problem in Ihrer TapTextMovement Klasse sein, wenn Sie Objekt instanziiert, kopiert es alle, die es Skripte, so dass Sie den Framecount zurücksetzen sollen, Modifikator auf starten oder Ihren Skript völlig verändern.

Wenn Sie ein vorhandenes Objekt in die Szene kopieren, sollten die Skriptwerte gespeichert werden. Erstellen Sie daher ein Fertig- und Instanziierungsobjekt.

Nun scheint es, das Objekt zu entfernen, kurz nachdem es als Framecount Instanziierung ist bereits über 60 Jahre

Überprüfen Sie, ob das funktioniert.

+0

Ich habe nicht einmal an mein Skript gedacht, jetzt, wo ich es merke. Das Textobjekt, das ich kopieren möchte, ist schon lange weg, es löschte sich selbst. Die Instanziierung eines Prefab würde mein Problem wahrscheinlich beheben. Vielen Dank! –

Verwandte Themen