Jump to content
Unity Insider Forum

ShV

Members
  • Content Count

    46
  • Joined

  • Last visited

Community Reputation

0 Neutral

About ShV

  • Rank
    Advanced Member

Recent Profile Visitors

182 profile views
  1. Ich möchte, dass mein Objekt, sobald es keinen Kontakt mehr zum Boden hat, 2 Sekunden auf der y- Achse steigt. Hat jemand eine Idee, wie ich das machen kann?
  2. Ich habe ein Skript geschrieben, welches Kugeln spawnt und diese nach vorne schießen soll: public class Waffe : MonoBehaviour { public Transform Bulletspawn; Rigidbody clone; public Rigidbody bulletPrefap; public float bulletSpeed = 100f; private readonly int maximaleMunition = 60; public int ShotsFired = 0; // Start is called before the first frame update private void Update() { if (Input.GetKeyDown("p")) { Schießen(); } if (Input.GetKeyDown("r")) { Nachladen(); } } public void Schießen() { if (ShotsFired < maximaleMunition) { clone = Instantiate(bulletPrefap, Bulletspawn.position, Bulletspawn.rotation); clone.AddForce(Bulletspawn.transform.forward * bulletSpeed); ShotsFired++; } } public void Nachladen() { ShotsFired = 0; } } Die Kugeln werden aber nur inaktiv geklont. Was muss ich machen, damit das funktioniert, was ich oben geschrieben habe?
  3. Ich möchte, dass man ab einer bestimmten Punktzahl wieder schießen kann(alle 100 Punkte), aber es kann passieren, dass der Spieler nicht genau hundert Punkte erreicht. Ich habe dafür dieses Script: if(Zähler.currentscore == 100) { MehrSchuss(); } Wie muss das umgeändert werden, damit der Spieler bei 100, 105, oder 110 Punkten wieder einen Schuss bekommt?
  4. ShV

    Schießen

    Das Debug.Log kommt auch nur beim ersten Mal. Bedeutet das, dass vermutlich der Button nach dem ersten Mal nicht mehr reagiert?
  5. ShV

    Schießen

    Bei mir hatte es vor kurzem ja auch noch funktioniert. Und auch wenn ich ShotsFired aus meinem Script rausnehme, kann ich nur 1 mal schießen. 1. Müsste das Debug.Log nicht eigentlich immer in der Konsole stehen, wenn ich den Button auslöse? Ich glaube nämlich, dass der Button nicht mehr reagiert, wenn er einmal ausgelöst wurde.
  6. ShV

    Schießen

    Funktioniert trotzdem nicht.
  7. ShV

    Schießen

    Ich habe folgendes Script: public Transform Bulletspawn; Rigidbody2D clone; public Rigidbody2D bulletPrefap; public float bulletSpeed = 100f; private readonly int maximaleMunition = 3; public int ShotsFired = 0; // Start is called before the first frame update void Start() { } // Update is called once per frame void Update() { if (CrossPlatformInputManager.GetButtonDown("Peng")) { Attack(); Debug.Log("Peng1"); } } void Attack() { if (ShotsFired < maximaleMunition) { clone = Instantiate(bulletPrefap, Bulletspawn.position, Bulletspawn.rotation); clone.AddForce(Bulletspawn.transform.right * bulletSpeed); ShotsFired ++; } else return; } Aber schon nachdem ich einmal den Button ausgelöst habe, funktioniert es nicht mehr. Woran kann das liegen?
  8. Ich habe im Spawnerscript jetzt folgendes hinzugefügt: void Update() { if (CrossPlatformInputManager.GetButtonDown("Restart")) { StartCoroutine(SpawnRandomGegner()); } } Es funktioniert aber trotzdem nicht. Was kann ich machen, damit es funktioniert?
  9. Ich habe die folgenden Scripts: public class GameOver : MonoBehaviour { public Text Highscore; public GameObject Player; public GameObject Spawner; public GameObject Restart; public void Start() { } private void OnTriggerEnter2D(Collider2D other) { if(other.tag == "Gegner") { PlayerPrefs.SetInt("Highscore", Zähler.currentscore); Debug.Log("Highscore"); Zähler.currentscore = 0; Spawner.SetActive(false); Player.SetActive(false); Restart.SetActive(true); } } } 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()); } } public class Restart : MonoBehaviour { public GameObject spawner; public GameObject Player; public GameObject Restart1; // Update is called once per frame void Update() { if (CrossPlatformInputManager.GetButtonDown("Restart")) { Neu(); } } public void Neu() { Player.SetActive(true); spawner.SetActive(true); Restart1.SetActive(false); } } Aber wenn ich den Restart-Button gedrückt habe, wird zwar der Spawner wieder aktiviert, aber die Gegner nicht. Woran liegt das?
  10. 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?
  11. 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?
  12. Ok. Und wie mache ich, dass die Punktzahl nach jedem Gameover auf 0 zurückgesetzt wird?
  13. 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?
  14. 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?
×
×
  • Create New...