Jump to content
Unity Insider Forum

Blissm

Members
  • Content Count

    17
  • Joined

  • Last visited

  • Days Won

    3

Blissm last won the day on May 30

Blissm had the most liked content!

Community Reputation

10 Gut

About Blissm

  • Rank
    Member

Recent Profile Visitors

209 profile views
  1. Soo, hab das jetzt mal ausprobiert. Funktioniert jetzt einwandfrei~ 😇 Danke schonmal für die groooße Hilfe! Aber ja, ich muss es bei jeder Szene einzeln angeben. Beim GameManager trag ich nämlich unter anderem auch immer den Level ein der als nächstes geladen werden soll.
  2. Ist es eigentlich normal dass der GameManager Skript inaktiv wird, sobald man auf Play drückt..? Oder ist das nur wegen des Fehlers?
  3. Tatsache, im Inspector hat er Pulli drin. Wenn ich zu Beginn jedoch jeden Charakter inaktiv habe, bleibt das Feld leer. Der GameManager sucht den Spieler nach Tag, weil ich mir nicht besser zu helfen wusste. 😅
  4. "June" war dort gerade der Charakter den ich gespielt habe, der nicht respawnen wollte. Stattdessen ist der Charakter "Pulli" rausgesprungen. 🤷‍♂️ Das mit dem GameManager schau ich mir jetzt nochmal an.
  5. Hmm, stimmt.. 🤔 Das mit dem herausnehmen kapier ich auch nicht.. 😂 sieht jedenfalls so hier aus:
  6. Er nimmt nich den parent von "Player" weg sondern den parent vom Charakter, also das "Player"-Objekt. Das hier ist der komplette Selection-Script: using System.Collections; using System.Collections.Generic; using UnityEngine; // based primary on a quick tutorial by "N3K EN" public class CharacterSelection : MonoBehaviour { private GameObject[] characterList; private int indexx; private void Start() { indexx = PlayerPrefs.GetInt("CharacterSelected"); characterList = new GameObject[transform.childCount]; // TEST characterList[1].SetActive(true); TEST // // Fill the array with our characters for (int i = 0; i < transform.childCount; i++) characterList[i] = transform.GetChild(i).gameObject; // Toggle off their renderer foreach (GameObject go in characterList) go.SetActive(false); // Toggle on the selected character if (characterList[indexx]) characterList[indexx].SetActive(true); } public void ChangeCharacter(int index) { indexx = index; PlayerPrefs.SetInt("CharacterSelected", index); int myPrefsValue = PlayerPrefs.GetInt("CharacterSelected"); } Beim laden der Scene wird der entsprechende Charakter je nach int aktiviert, was auch funktioniert.
  7. Huuuch, auf einmal kommt jetzt doch ne andere Fehlermeldung (ohne dass ich jetzt nochmal was geändert hätte 🤨) anstatt der voherigen, nämlich: NullReferenceException: Object reference not set to an instance of an object GameManager.ResetGame () (at Assets/Scripts/GameManager.cs:192) CharacterController2D+<KillPlayer>c__Iterator0.MoveNext () (at Assets/Scripts/CharacterController2D.cs:267) UnityEngine.SetupCoroutine.InvokeMoveNext (IEnumerator enumerator, IntPtr returnValueAddress) (at C:/buildslave/unity/build/Runtime/Export/Coroutines.cs:17) Aach, welche der beiden Meldungen kommt hängt davon ab, ob ich die Charaktere alle an oder aus hab. Wenn sie alle aktiviert sind zum Start dann kommt das mit dem Animator.
  8. Ändert leider nix. Kommt nur die gleiche Fehlermeldung wie vorher. Es hat auch jeder Charakter seinen ganz persönlichen Animation-Controller.
  9. Hmmm, also während diese Meldung kommt wird mir im Animator selbst angezeigt was er macht. Scheint alles normal, abgesehen von dem Respawn. Das seltsame ist dass es funktioniert wenn der Charakter der gespielt wird voher in der Szene schon aktiv ist, aber wiederum nicht wenn auch nur ein weiterer aktiv ist, oder garkeiner. Und ich hab festgestellt dass wenn dieser eine Charakter aktiv ist, ich aber einen anderen im Menü anwähle zum spielen, ich diesen zwar auch spielen kann, aber bei einem Tod der zuvor aktivierte respawnt anstelle des Charakters den ich gerade gespielt habe. (Er ist jedoch inaktiv, weil durch den Int ja der andere aktiviert ist. Ich merk es nur daran, dass er den Parent verlässt.) Heißt das dass das Spiel einfach nach dem falschen Controller sucht..? Aber was kann ich da machen? 🤔 Sollte ich vielleicht den Parent respawnen, anstelle des Charakters selbst? (Andererseits hat der mit dem Animator ja nix zu tun..) 😅 Achja.. und _animator.SetTrigger("Victory"); funktioniert ganz normal. Das find ich auch äußerst kurios in Anbetracht dessen das behauptet wird da wäre kein Controller. Ich schau mal ob ich noch was zum zeigen finden kann, aber eigentlich hab ich alles zum Thema Animator und Respawn oben schon drin.. 🤷‍♂️
  10. Heyho, ich hab's geschafft..! ...oder auch nicht. 😅 Aber der Reihe nach.. Bei meinem Projekt Mega Bliss Bros. habe ich schon seit längerer Zeit versucht eine Charakter-Auswahl im Titel-Menü zu integrieren, und nach vielen Versuchen und vielem Lernen hab ich es jetzt auch tatsächlich geschafft. Jedoch wartete dort natürlich gleich schon der nächste Fehler auf mich.. 😬 Nämlich kann ich zwar mit jedem der Charaktere spielen und auch von Level zu Level weiter springen, aber wenn der Charakter stirbt will er einfach nicht mehr respawnen. Es hängt dann in Dauerschleife in der Todes-Animation fest anstatt dass es den Animator triggert zu respawnen. 🤷‍♂️ Animator is not playing an AnimatorController UnityEngine.Animator:SetTrigger(String) CharacterController2D:Respawn(Vector3) (at Assets/Scripts/CharacterController2D.cs:306) GameManager:ResetGame() (at Assets/Scripts/GameManager.cs:192) <KillPlayer>c__Iterator0:MoveNext() (at Assets/Scripts/CharacterController2D.cs:267) UnityEngine.SetupCoroutine:InvokeMoveNext(IEnumerator, IntPtr) Das ist was mit die Konsole dazu ausspuckt. Das Auswählen der Charaktere funktioniert über die PlayerPrefs mit SetInt und GetInt. Jeder Charakter hat den Character-Controller Skript mit individuellen Anpassungen, jeder ist als "Player" getaggt und ihr gemeinsames Parent hat den Character-Selection Skript. Die Spielfigur wird durch den "Player"-Tag erkannt. Ausschnitt aus dem Character-Controller Skript: // (...) // public function to apply damage to the player public void ApplyDamage (int damage) { if (playerCanMove) { playerHealth -= damage; if (playerHealth <= 0) { // player is now dead, so start dying PlaySound(deathSFX); StartCoroutine (KillPlayer ()); } } } // public function to kill the player when they have a fall death public void FallDeath () { if (playerCanMove) { playerHealth = 0; PlaySound(fallSFX); StartCoroutine (KillPlayer ()); } } // coroutine to kill the player IEnumerator KillPlayer() { if (playerCanMove) { // freeze the player FreezeMotion(); // play the death animation _animator.SetTrigger("Death"); // After waiting tell the GameManager to reset the game yield return new WaitForSeconds(2.0f); if (GameManager.gm) // if the gameManager is available, tell it to reset the game GameManager.gm.ResetGame(); else // otherwise, just reload the current level SceneManager.LoadScene(SceneManager.GetActiveScene().name); } } // (...) // public function to respawn the player at the appropriate location public void Respawn(Vector3 spawnloc) { UnFreezeMotion(); playerHealth = 1; _transform.parent = null; _transform.position = spawnloc; _animator.SetTrigger("Respawn"); } // (...) Ausschnitt aus dem Game-Manager Skript: // (...) Vector3 _spawnLocation; // (...) // set things up here void Awake () { // setup reference to game manager if (gm == null) gm = this.GetComponent<GameManager>(); // setup all the variables, the UI, and provide errors if things not setup properly. setupDefaults(); } // (...) // setup all the variables, the UI, and provide errors if things not setup properly. void setupDefaults() { // setup reference to player if (_player == null) _player = GameObject.FindGameObjectWithTag("Player"); // (...) // get current scene _scene = SceneManager.GetActiveScene(); // get initial _spawnLocation based on initial position of player _spawnLocation = _player.transform.position; // (...) // get the UI ready for the game refreshGUI(); } // (...) // public function to remove player life and reset game accordingly public void ResetGame() { // remove life and update GUI lives--; refreshGUI(); if (lives<=0) { // no more lives // save the current player prefs before going to GameOver PlayerPrefManager.SavePlayerState(score,highscore,lives); // load the gameOver screen SceneManager.LoadScene(levelAfterGameOver); } else { // tell the player to respawn _player.GetComponent<CharacterController2D>().Respawn(_spawnLocation); } } Hoffe die Ausschnitte sind brauchbar. 😅 Aber da es mit einem einzelnen Charakter ja einwandfrei funktioniert hat, denke ich dass die anderen Sachen irrelevant sind. Jedenfalls komme ich hier nicht weiter, aber vielleicht habt ihr ja eine Idee..?
  11. Heeyy, hier bin ich wieder. War die letzten Monate viel mit unterschiedlichsten Tutorials beschäftigt, und hatte nicht so den Kopf hierfür, aber jetzt stell ich mal wie versprochen weitere Projekte von mir vor~ Heute dreht es sich um "Random Kingdom", auch wenn ich es hier jetzt zusammenfassen werde mit dem Prototyp-Projekt "Legends of Bliss", was daran liegt dass ich die Basics von genanntem Prototyp später für Random Kingdom nutzen werde und Random Kingdom selbst bislang noch nicht in Unity existiert (unter anderem auch weil ich noch nicht genug Sprites für die Landschaft habe). Wie sich sicherlich schon einige denken können wird es ein Spiel vergleichbar mit klassischen Zelda-Titeln sein. Auf den Titel "Random Kingdom" kam ich da das Setting "halt noch irgend so ein x-beliebiges Königreich" ist. Doch inzwischen ist der Name Programm! Abgesehen von der allgemein parodischen Bedeutung, die immer wieder in's Spiel mit einfließt, ist es nun auch der Plan dass sich die Bereiche bei jedem Bildschirmwechsel verändern und Dungeons daraus resultierend sogar richtig Labyrinth-artig werden. Aber keine Sorge, ich mache mir auch bereits Gedanken darum wie es trotz alldem noch eine gewisse Übersichtlichkeit und Fairness behält, aber darauf werde ich zu einem anderen Zeitpunkt noch näher eingehen. Ein weiteres Feature wird sein das man diverse Copy & Paste Fähigkeiten erlangt, wie das Übernehmen eines Elements (z.B. das des Gegners) oder das duplizieren von Objekten in der Spielwelt. Ich bin auch am überlegen dass man vielleicht gegen Ende des Spiels die Fähigkeit erlangt den Zufall selbst zu kontrollieren, sodass man nicht mehr abhängig davon ist beim Finden seines Weges und leichter an die verschiedenen Schätze herankommt die hier und da versteckt sind. Es gibt noch ein paar weitere Features die ich erwäge zu integrieren, die für mich zunächst aber zweitrangig sind und bei denen ich mir auch noch nicht wirklich sicher bin ob sie dort wirklich rein gehören. Zum Beispiel wäre da die freie Schwertführung, d.h. dass man mit dem Analogstick die Ausrichtung des Schwertes verändern kann um z.B. diagonal anzugreifen oder das Schwert in die andere Richtung zu schwingen. Ich denke dass ich es so oder so einfach mal ausprobieren werde, und dann sehe ich ja ob es denn auch so funktioniert wie ich es mir vorstelle; aber wie gesagt, Priorität hat es für dieses Projekt jetzt nicht. Ich hab hier für euch eine kleine Auswahl an Grafiken zusammengestellt, die ich für das Projekt angefertigt habe. Die ersten beiden Bilder sollen In-Game-Screens darstellen, in dem Format eines DS-Bildschirms, einfach um mal zu überlegen wie das ganze so aussehen könnte. Inzwischen hab ich nochmal etwas andere Vorstellungen dazu, und auch was die Charakter-Grafiken angeht hab ich mir bereits was neues überlegt. Wie man in den unteren beiden Zeilen des dritten Bildes schon sehen kann, hab ich begonnen die Konturen der Figuren zu entfernen, wodurch es - wie ich finde - etwas frischer und lebendiger wirkt. Allerdings gefällt mir der alte Stil auch nachwievor noch sehr, weshalb ich erwäge diesen als optionalen Stil im Spiel mit einzubauen. Aber das seh ich dann.. 😅 Im vierten Bild sind die Landschaftsteile die ich vor einigen Jahren gemacht hatte, aber ich werd das ganze demnächst nochmal von vorn angehen, da diese Teile zu grell, zu kleinteilig und generell einfach nicht gelungen sind. Ganz zu Beginn hab ich außerdem eine Art Karte erstellt, zur groben Orientierung, mithilfe der ich mir den Spielablauf und die Ortschaften überlege. An dieser Stelle mach ich erst einmal Schluss mit Random Kingdom und gehe über zu Legends of Bliss, da jenes das Projekt ist dass ich aktuell tatsächlich produziere (und zu welchem ich gegebenenfalls auch Fragen hier im Forum stellen werde 😉). Dieses Projekt basiert übrigens auf einem Tutorial von Mister Taft Creates auf YouTube~ Das ist mein aktuelles Splash-Image - ja ich weiß, der Schriftzug ist nicht ganz optimal, aber für's erste reicht mir das.. 😄 Und hier noch ein paar Screenshots: Ich hab auch eine kleine sentimental-düstere Story dazu im Kopf, aber aktuell bin ich noch nicht soweit um es hier zu posten; ihr müsst euch also noch ein klein wenig gedulden~ 😉 Das wär's dann für's erste - sobald es etwas neues gibt werd ich es natürlich hier posten. Bis dahin gibt es aber auch noch ein paar weitere Projekte die ich euch vorstellen möchte! Also, bis dahin~
  12. Ich hab's geschafft..! 😍 Ich musste es jetzt nur noch nach void Update verschieben. Manchmal kommt man auf die einfachsten Dinge nicht... 🤦‍♂️ Danke für die schnelle Antwort! Ja, da war ne Fehlermeldung, aber die war irgendwie uneindeutig. 🤔 Und naja, ein paar Mal hatte ich es auch versucht anders zu nennen, aber dann wurde mir alles mit .setActive rot unterstrichen, deshalb dachte ich es geht nicht anders. Aber ja, wieso nicht einfach dorthin schieben wo es eh schon ein void gibt~ // game loop void Update() { // if ESC pressed then pause the game if (Input.GetKeyDown(KeyCode.Escape)) { if (Time.timeScale > 0f) { UIGamePaused.SetActive(true); // this brings up the pause UI Time.timeScale = 0f; // this pauses the game action } else { Time.timeScale = 1f; // this unpauses the game action (ie. back to normal) UIGamePaused.SetActive(false); // remove the pause UI } } if (lives >= 26) { _Invincible.SetActive(true); } if (lives <= 25) { _Invincible.SetActive(false); } } 💜💚
  13. Hehoo, ich hätt' da jetzt auch mal eine Frage.... Ich hab vor bei Mega Bliss Bros. eine Funktion einzubauen die bewirkt dass man, wenn man 25 oder mehr Leben gesammelt hat, man den Unbesiegbarkeits-Modus aktiviert. Das heißt alle Gegner gegen die man dann läuft sterben einfach, ohne den Spieler auch nur zu kratzen. Lediglich das Herunterfallen kann einen dann noch Leben kosten, und somit den Modus wieder deaktivieren. Das mit dem Meucheln klappt soweit auch schon gut, nur hab ich Probleme damit den Modus ein- und auszustellen. using UnityEngine; using System.Collections; using UnityEngine.UI; using UnityEngine.SceneManagement; public class GameManager : MonoBehaviour { public static GameManager gm; // (...) // game performance public int score = 0; public int highscore = 0; public int startLives = 3; public int lives = 25; // (...) // private variables GameObject _player; Vector3 _spawnLocation; Scene _scene; GameObject _Invincible; // (...) // setup all the variables, the UI, and provide errors if things not setup properly. void setupDefaults() { // (...) // Wieso findet es das nicht ??? o-Ô _Invincible = GameObject.FindGameObjectWithTag("Invincibility"); // (...) public void SetActive() { if (lives>=25) { _Invincible.SetActive(true); } if (lives<=24) { _Invincible.SetActive(false); } } } Es passiert einfach garnichts. Wenn "Invincibility" bereits aktiv ist bleibt es das auch, und ich kann die Gegner töten. Aber es deaktiviert sich nicht wenn ich Herzen verliere. Und eigentlich soll es ja auch so sein dass es zu Beginn bereits deaktiviert ist, und sich erst aktiviert sobald man genug Leben ergattert hat. Aber das klappt genauso wenig. "Invincibility" ist ein Child von Sparty (der Spielfigur). Ist es aktiviert bekommt Sparty pulsierende Herzchen-Augen und einen Circle-Collider, der alle Gegner um ihn herum ausmerzt. Hoffe euch fällt was dazu ein. Hab bislang nichts finden können was mir da irgendwie weiter hilft.... 😅😬
  14. Soo.. Dann stell ich doch erstmal mein aktuellstes Projekt vor. Es ist zwar nur zu Übungszwecken, und daher weniger originell als meine anderen Projekte, aber dennoch nicht irrelevant. Schließlich werde ich dazu noch einige Fragen hier im Forum stellen. 😉 "Mega Bliss Bros." ist meine persönliche Abwandlung von "Super Sparty Bros.", einem Übungsprojekt der Michigan State University (und eine offensichtliche Anlehnung an "Super Mario Bros.") Meine Arbeitsweise war bislang das was mir in den Kopf kommt, das mach ich einfach, was auch zunächst gut funktionierte, weil es mir an Ideen nicht mangelt, bis dann irgendwann einfach nichts mehr funktionierte... 😅 Sparty ist ein kleiner Spartaner. Er ist der erste spielbare Charakter. Eigentlich wollte ich dass die Charaktere nach und nach freigeschaltet werden und im Menü auswählbar sind, allerdings hab ich es nachwievor nicht hinbekommen etwas derartiges mit dem SpartyBros.-Script übereinzubringen. Entsprechend teil ich die Charaktere vorerst den Leveln selbst zu. Bislang laufen die Gegner nur von A nach B nach C ... und man springt auf sie um sie kurz zu betäuben. Bislang kann man sie nicht töten. Kleine Erfolge gab es aber schon auch für mich; sowohl Leben-erweiternde Herzcontainer als auch wegbröckelnder Boden und eine (ab einem gewissen Punkt) steigende tödliche Flut hab ich sowohl gespritet als auch gescriptet. Der böse Mond hat Berry hypnotisiert..! .......Der erste Endgegner. Bislang ist auch sie unbesiegbar, was ein wenig unpraktisch ist. 😐 Ebenso wie die anderen Gegner rennt sie von A nach B nach C ..., dafür aber eine deutlich größere Runde über die ganze Arena. Später will ich auch noch Blitze hier und da spawnen lassen und Wasser-Angriffe die aus Berrys Richtung kommen. Das Wasser steigt bei dem Kampf auf und ab - manche Stellen erreicht man nur wenn das Wasser unten ist, und andere nur wenn es ganz oben ist. Nach dem Kampf kann man als Berry spielen, und dabei zusehen wie im Hintergrund langsam die Sonne "aufgeht". Für die weiteren Level hab ich auch schon einige Ideen, spielerisch wie auch grafisch, aber ich will erstmal die Probleme die ich habe lösen bevor ich mir neue Probleme aufbürde. 😄 Soweit erstmal dazu von mir. Auf die "Probleme" geh ich dann im entsprechenden Topic näher ein. Meine anderen Projekte stell ich in Kürze auch noch vor - da gibt's noch mehr zu sehen, also freut euch schonmal drauf~ 😉
  15. 😅 Bin halt etwas unsicher, und vielleicht auch paranoid. Weiß auch noch nicht genau was ich hier als nächstes machen soll.. 😂 Erstmal bei "Projekten" eins vorstellen..? Oder doch erstmal konkrete Fragen zu Scripts für Sparty Bros. stellen..? Oder alles gleichzeitig?? 🙈 Prioritäten sind gerade nicht so mein Ding.....
×
×
  • Create New...