Jump to content
Unity Insider Forum

ShV

Members
  • Content Count

    37
  • Joined

  • Last visited

Community Reputation

0 Neutral

About ShV

  • Rank
    Advanced Member

Recent Profile Visitors

57 profile views
  1. Ich habe in meinem Spiel eine Scoreanzeige, aber bei jedem Szenenwechsel wird sie gelöscht. Habe auch schon folgendes Script ausprobiert: void Awake() { GameObject[] objs = GameObject.FindGameObjectsWithTag("Score"); DontDestroyOnLoad(this.gameObject); Debug.Log("Nicht Zerstört"); } Aber dann bekomme ich die Meldung, dass es nur für root GameObjects funktioniert. 1. Was sind root GameObjects? 2. Wie kann ich verhindern, dass der Text gelöscht wird?
  2. Wegen der Highscoreanzeige: Ich dachte ich kann mit einer veränderten Form vom Scorescript auch den Highscore anzeigen lassen, aber ich glaube dabei liege ich nicht ansatzweise richtig. Hier die Scripts: if(other.tag == "Gegner") { SceneManager.LoadScene(sceneToLoad); var finalscore = Zähler.currentscore; //Der Highscore PlayerPrefs.SetInt("Bester", finalscore); Debug.Log("Highscore"); Zähler.currentscore = 0; } [RequireComponent(typeof(Text))] // Damit kann diese Komponente nur auf GameObjects gelegt werden, die auch eine Textkomponente haben public class Highscore : MonoBehaviour { private Text text; private void Awake() { text = GetComponent<Text>(); Debug.Log("Wach"); } private void OnEnable() { Zähler.onScoreChange += UpdateScore; // Reaktion "UpdateScore" hinzufügen UpdateScore(Zähler.currentscore); // Gleich mal den aktuellen Wert anzeigen, nicht erst bis zur ersten Änderung warten Debug.Log("Score anzeigen"); } private void OnDisable() { Zähler.onScoreChange += UpdateScore; // Reaktion wieder austragen Debug.Log("onScoreChange"); } private void UpdateScore(int newScore) { if (Zähler.currentscore > PlayerPrefs.GetInt("Bester")) { text.text = PlayerPrefs.GetInt("Bester") + ""; Debug.Log("Highscore"); } } } Was muss ich machen, um den Highscore auch anzeigen zu lassen?
  3. Ok. Und wie mache ich, dass die Punktzahl nach jedem Gameover auf 0 zurückgesetzt wird?
  4. Ok ich habe den Fehler gefunden. Wenn ich aus dem Hauptmenü das erste Mal auf Play drücke, funktioniert alles. Wenn ich aber ein zweites Mal starte, steht noch die Punktzahl vom vorherigen Durchgang (liegt wahrscheinlich daran, dass ich sie noch nicht mit den Playerprefs speichere und nicht zurücksetze). Wie funktioniert das mit den Playerprefs also genau? Wie speichere ich die Punktzahl und wie lasse ich sie dann Anzeigen?
  5. Habe herausgefunden, woran es liegt. Ich habe ein Hauptmenü, wo man in einer anderen Szene "Play" auswählt, um die Szene zu wechseln und zu spielen. Hier ist das Script, welches dafür zuständig ist: using UnityEngine.SceneManagement; public class Play : MonoBehaviour { public string sceneName; public void Spielen() { SceneManager.LoadScene(sceneName); } } Und wenn ich am Anfang diese Szene deaktiviere, funktioniert alles. Wo liegt also hierbei der Fehler?
  6. Ich habe jetzt alle Scripts durchgeschaut, aber nichts gefunden. Kannst du hier vielleicht was finden, was damit zusammenhängen könnte?: public class Shoot : MonoBehaviour { public Transform Bulletspawn; Rigidbody2D clone; public Rigidbody2D bulletPrefap; public float bulletSpeed = 100f; // Start is called before the first frame update void Start() { } // Update is called once per frame void Attack() { clone = Instantiate(bulletPrefap, Bulletspawn.position, Bulletspawn.rotation); clone.AddForce(Bulletspawn.transform.right * bulletSpeed); } } public class Kugelgrenze : MonoBehaviour { public float lifespan = 1.3f; // Start is called before the first frame update void Start() { Destroy(gameObject, lifespan); } // Update is called once per frame void Update() { } } public class Kugeldelete : MonoBehaviour { private void OnCollisionEnter2D(Collision2D other) { if (other.gameObject.tag == "Gegner") { Destroy(gameObject, 0.01f); } } } private void OnTriggerEnter2D(Collider2D other) { if(other.tag == "Collector") { gameObject.SetActive(false); Zähler.currentscore += 10; Debug.Log("currentscore"); } } public class Gegnerbew : MonoBehaviour { public float speed = -1f; private Rigidbody2D myRB; // Start is called before the first frame update void Start() { myRB = GetComponent<Rigidbody2D>(); } // Update is called once per frame void Update() { myRB.velocity = new Vector2(speed, 0); } } using UnityEngine; using UnityEngine.SceneManagement; using UnityEngine.SocialPlatforms.Impl; public class GameOver : MonoBehaviour { public string sceneToLoad; public void OnTriggerEnter2D(Collider2D other) { if(other.tag == "Gegner") { SceneManager.LoadScene(sceneToLoad); var finalscore = Zähler.currentscore; PlayerPrefs.SetInt("Highscore", finalscore); Debug.Log("Highscore"); } } } public class Fight : MonoBehaviour { public Transform Bulletspawn; Rigidbody2D clone; public Rigidbody2D bulletPrefap; public float bulletSpeed = 100f; private readonly int maximaleMunition = 3; public int ShotsFired; // Update is called once per frame void Update() { if (CrossPlatformInputManager.GetButtonDown("Peng")) { Attack(); } } void Attack() { if (ShotsFired < maximaleMunition) { clone = Instantiate(bulletPrefap, Bulletspawn.position, Bulletspawn.rotation); clone.AddForce(Bulletspawn.transform.right * bulletSpeed); ShotsFired++; } else return; } private void OnTriggerEnter2D(Collider2D other) { if (other.tag == "NItem") { ShotsFired--; } } } public class BGLoope : MonoBehaviour { public float speed = 0.1f; private Material mat; private Vector2 offset = Vector2.zero; // Start is called before the first frame update void Start() { mat = GetComponent<Renderer>().material; offset = mat.GetTextureOffset("MainTex"); } // Update is called once per frame void Update() { offset.x = offset.x + speed * Time.deltaTime; mat.SetTextureOffset("_MainTex", offset); } }
  7. Am Handy kommt das Problem auch, aber erst, nachdem der Spieler Gameover ging und ich das Spiel neu gestartet habe. Die alte Punktzahl stand noch da, wurde also nicht auf 0 zurückgesetzt und nicht mehr aktualisiert. Kann es vielleicht sein, dass sich der Code selber behindert?
  8. Ich habe das Spiel gerade auf mein Handy exportiert und dort aktualisiert sich die Punktzahl direkt. Sie aktualisiert sich nur nicht in Unity. Woran kann das liegen?
  9. Immernoch diese Fehlermeldung: Und was genau muss ich hiermit machen: text.text = newScore + "10";
  10. Ich habe in mein Script zum Deaktivieren noch ein Debug.Log reingepackt: void OnCollisionEnter2D(Collision2D other) { if (other.gameObject.tag == "Kugel") { gameObject.SetActive(false); Debug.Log("inactive"); Zähler.currentscore += 10; //Mit "Zähler" auf das Script verwiesen und mit "currentscore" auf die Variable im Script Debug.Log("Gegnerpunkte"); } } "inactive wird mir nun in der Konsole angezeigt, aber "Gegnerpunkte" nicht
  11. using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; [RequireComponent(typeof(Text))] // Damit kann diese Komponente nur auf GameObjects gelegt werden, die auch eine Textkomponente haben public class ScoreAnzeige : MonoBehaviour { private Text text; private void Awake() { text = GetComponent<Text>(); Debug.Log("Wach"); } private void OnEnable() { Zähler.onScoreChange += UpdateScore; // Reaktion "UpdateScore" hinzufügen UpdateScore(Zähler.currentscore); // Gleich mal den aktuellen Wert anzeigen, nicht erst bis zur ersten Änderung warten Debug.Log("Score anzeigen"); } private void OnDisable() { Zähler.onScoreChange += UpdateScore; // Reaktion wieder austragen UpdateScore(Zähler.currentscore); Debug.Log("onScoreChange"); } private void UpdateScore(int newScore) { text.text = newScore + "10"; Debug.Log("Neuer Score"); } }
  12. Ich habe jetzt ein neues Projekt nur mit dem Nötigsten erstellt. Jetzt sehe ich auch "currentscore" in der Konsole. Trotzdem wird aber vor der Punktzahl eine 10 angezeigt. Das sind die einzigen, die ich benutze: public class Gegnerbew : MonoBehaviour { public float speed = -1f; private Rigidbody2D myRB; // Start is called before the first frame update void Start() { myRB = GetComponent<Rigidbody2D>(); } // Update is called once per frame void Update() { myRB.velocity = new Vector2(speed, 0); } } public class Gegneroff : MonoBehaviour { private void OnTriggerEnter2D(Collider2D other) { if(other.tag == "Collector") { gameObject.SetActive(false); Zähler.currentscore += 10; Debug.Log("currentscore"); } } public class PlayerMovement : MonoBehaviour { public float jumpForce = 3f; private Rigidbody2D myRB; private bool canJump; // Start is called before the first frame update void Start() { myRB = GetComponent<Rigidbody2D>(); } //Jump Funktion public void Jump() { //Darf Spieler springen? if (canJump) { canJump = false; myRB.velocity = new Vector2(0f, jumpForce); } } private void OnCollisionEnter2D(Collision2D other) { canJump = true; } } Könnte das vielleicht mit an diesem Scripte liegen, das "curentscore" nicht in der Konsole erscheint?: public class Spawner : MonoBehaviour { public GameObject[] Gegner; public List<GameObject> GegnerToSpawn = new List<GameObject>(); int index; private void Awake() { IniGegner(); } // Start is called before the first frame update void Start() { StartCoroutine(SpawnRandomGegner()); } void IniGegner() { index = 0; //Initialisiere die Gegner for (int i = 0; i < Gegner.Length * 10; i++) { GameObject obj = Instantiate(Gegner[index], transform.position, Quaternion.identity); GegnerToSpawn.Add(obj); GegnerToSpawn[i].SetActive(false); index++; if (index == Gegner.Length) { index = 0; } } } // Update is called once per frame void Update() { } IEnumerator SpawnRandomGegner() { //Warte eine gewisse Zeit yield return new WaitForSeconds(Random.Range(1.5f, 4.5f)); //Aktiviere Gegner int index = Random.Range(0, GegnerToSpawn.Count); while(true) { if(!GegnerToSpawn[index].activeInHierarchy) { GegnerToSpawn[index].SetActive(true); GegnerToSpawn[index].transform.position = transform.position; break; } else { index = Random.Range(0, GegnerToSpawn.Count); } } StartCoroutine(SpawnRandomGegner()); } }
  13. Das ist ja das Merkwürdige. Wenn das gameObject auf den Collector trifft, wird es deaktiviert. In der Konsole steht aber trotzdem nichts
  14. Nein, sehe ich nicht Den Code für die PlayerPrefs habe ich auch noch nicht. Der einzige Code, der noch etwas damit zu tun hat ist der: void OnCollisionEnter2D(Collision2D other) { if (other.gameObject.tag == "Kugel") { gameObject.SetActive(false); Zähler.currentscore += 10; //Mit "Zähler" auf das Script verwiesen und mit "currentscore" auf die Variable im Script Debug.Log("Gegnerpunkte"); } }
×
×
  • Create New...