Jump to content
Unity Insider Forum

Der_Stefan_

Members
  • Content Count

    15
  • Joined

  • Last visited

Everything posted by Der_Stefan_

  1. Hmmm... Ich habe momentan alles in dieser einen Szene. Sprich, wenn ich sie neu laden lasse, startet das ganze mit dem Hauptmenü. Sprich, die Customer-Journey (sofern ich das jetzt einfach mal auf ein Videoadaptieren darf) wäre etwas unglücklich: "Game over - Neustart - Hauptmenü - Spiel starten". Daher wollte ich eigentlich direkt in`s Spiel starten. Sprich, alle Objekte und Eingaben auf Werkseinstellung und von neuem starten. Deinen Ansatz mit dem umgedrehten Spieß überfordert mich beim ersten Durchlesen grad ein wenig Liegt vielleicht aber auch daran, dass ich gerade mal eine Tasse Kaffee intus habe und noch nicht ganz auf Level bin. Du meinst also, grob gesprochen, im Menü-Script steuere ich das Klicken auf den Reload-Button: Nur das Klicken, erstmal ohne Funktion. Und auf jeweils auf den Objekten liegt das Reload-Script, was nach diesem Event des Button-Klickens sucht und sich dann entsprechend auslöst? Sobald ich wieder am Projekt sitze, schaue ich mir das genauer an und versuche das einzubauen. Für den Moment danke dir aber schon mal sehr für die Idee
  2. Ich mal wieder... wieder mal ein Problem bzw. eigentlich... kein Problem. Ich bin auf der Suche nach einer etwas charmanteren Lösung als das grobe Holzgehacke, welches ich hier fabriziert habe. Und zwar baue ich ja grad diesemn - Ich nenne es jetzt einfach mal "Endlessrunner", bei dem ich mit einem immer schneller werdenden Raumschiff durch sich drehende Schotts fliegen muss. Zu den sich bewegenden Segmenten habe ich ja kürzlich auch schon mal eine Frage gestellt (siehe Verlinkung unten). Kurz zusammengefasst: Am Ende jeden Röhrensegments befindet sich ein Trigger, der das Segment nach vorne springen lässt. Das ganze mit 4 Röhrensegmenten, so dass man immer mindestens 3 Segmente vor der Nase hat. Das gleiche mit den Schotts am Ende jeden Röhrensegments. Ich bin nun mittlerweile auch schon nahezu am Ende des Projektes, es funktioniert alles so weit so gut, das Spiel ist quasi bereits im vollen Umfang spielbar. Aaaaber: Am Ende, wenn man schlussendlich doch gegen eine Wand gedonnert ist, habe ich einen Restart-Button eingebaut, bei dem sich Raumschiff, Rohr-Segmente und Schotts auf ihre Ursprungsposition setzen. Wie gesagt, etwas hölzern habe ich das wie folgt umgesetzt: Auf jedes der 4 Rohr-Segmente und der 4 Schotts habe ich ein "Restart"-Script gesetzt (Auszug): void Awake() { this.originalPosition = this.transform.position; this.originalRotation = this.transform.rotation; } public void Menurestart_Click() { this.transform.position = this.originalPosition; this.transform.rotation = this.originalRotation; Für die Menüs und Menübuttons habe ich eigentlich ein eigenes Script, aber ich habe es nicht hinbekommen, die 8 GameObjects aus diesem Script heraus anzusprechen. Ich musste also jedes Object mit einem eigenen Script für den Restart versorgen und dann alle GameObjects einzeln in der Funktion des Buttons hinterlegen. 9x mit dem Raumschiff. Dazu in jedes Gameobject alle relevanten UI-Buttons in die Public-Slots (siehe Screenshots im Anhang). Wie gesagt: Es funktioniert. Aber geht das nicht irgendwie eleganter? Kann ich nicht zum Beispiel oben genanntes Script-Segment in mein Menü-Funktionsscript übernehmen und z.B. statt "this" auf einen Tag des GameObjects verweisen? Oder, ohne Tags, sowas wie GameObject.buttonRestart { this.transform.position = this.originalPosition; } oder { GameObject.buttonRestart.transform.position = GameObject.buttonRestart.originalPosition; } Funktioniert natürlich beides nicht (und ja, ich hab`s wider besseren Wissens probiert ) Ich habe in den Weiten des Internets bereits diverse Lösungsansätze dazu gefunden. Die für mich logischsten/ verständlichsten Ansätze waren das Menü als eigene Szene aufsetzen und per Script einfach die Level-Szene neu laden. Habe ich erst gar nicht ausprobiert, mein Menü steht ja jetzt schon und... Näää Beim nächsten mal und dann direkt von vornherein. Und als zweite Möglichkeit, wäre es, aus dem Menü-Script heraus eine "Message" an die jeweiligen Scripte in den GameObjects zu senden. So hätte ich zwar immer noch einzelne Scripts, aber ich müsste den Button nur "einmal" verlinken. Klingt gut, aber ich habe es einfach nicht zum laufen bekommen... Wie würdet ihr das lösen? Danke für euer Feedback und möge euch nie die Sonne auf den Bildschirm scheinen Hier dann noch die besagte Verlinkung der Frage zu den sich bewegenden Segmenten (Der vollständigkeitshalber)
  3. Nachdem ich jetzt schon die ersten Beiträge gepostet habe, sollte ich vielleicht nun auch mal ein offizielles Hallo in die Runde werfen Ich bin der Stefan aus Dortmund. Mit meinem 84er Baujahr ein solider Mitt-Dreißiger. Ich bin Grafiker und Eventmanager in der Marketingabteilung eines mittelständischen Unternehmens und kümmere mich in meinem Job hauptsächlich um die Planung und Organisation der Messeauftritte unseres Unternehmens, sowie Konzept-Ladenbaueinrichtungen, welche wir als Dienstleistung anbieten. Für beides nutze ich die Adobe-Produkte, vornehmlich Photoshop, inDesign und Illustrator, und vor allem Vectorworks. Eine CAD-Software, ausgelegt für Architektur, Möbelbau etc. Eben mm-genaue 3D-Zeichnungen von Objekten, die hinterher aus diesen Daten heraus direkt produziert werden können. Soweit so gut, doch warum bin ich dann HIER?! Über Vectorworks bin ich an VR-Anwendungen gekommen, ich kann meinen Kunden ihre Einrichtungen schon vor dem Umbau virtuell "auf die Nase" setzen. Leider ist die Technik mit diesen Mitteln nur sehr begrenzt nutzbar. Es wird lediglich eine Photosphere gerendert, in der sich der Kunde umgucken kann. Kein Bewegen, kein interaktiver Nutzen, nicht mal ein kleines "um die Ecke" gucken. Für den beruflichen Nutzen ausreichend, bin ich im eigenen Anspruch aber nicht zufrieden. Daher habe ich für mich privat Mittel und Wege gesucht, diese Dinge erweitern zu können und bin bei Unity gelandet. Und nun ja... im Moment verbringe ich den einen oder anderen Abend damit, mich da reinzufuchsen. Hab noch nie was mit Programmierung zu tun gehabt und auch Blender war mir bestenfalls rudimentär bekannt. Jetzt aktuell bin ich seit etwas mehr als 3 Monaten dran und habe tatsächlich schon die ersten Dinge "gedreht" bekommen. Klar, ich stehe weiterhin am Anfang und habe weitaus mehr Frage- als Ausrufezeichen vor mir. Aber das "Herausfinden" der richtigen Lösung hält mich am Ball, ich kann mich da sehr dran festbeißen. Auch aus diesem Grund hoffe ich, dass ich nicht ganz so oft Anfängerfragen fragen muss. Ich bin ein Mensch, ich versuche erstmal selbst zu basteln und Herauszufinden, bevor ich jemanden Frage. Also WENN ich also hier was frage, dann wisst ihr, mein Computer steht kurz davor aus dem zweiten Stock zu fliegen Soweit zu mir Lieben Gruß Der Stefan Und ach ja... Die Umsetzung eines Umbaus als interaktive VR-Ansicht habe ich tatsächlich schon hinbekommen. Also... Zumindest als Bildschirm-Umsetzung, zuhause habe ich schlichtweg keine Brille Jetzt will ich auch weitermachen. "Größere" Projekte mit mehr Funktionen bauen und erarbeiten.
  4. Okay okay. Die Techniker wieder. Alles klar. Pro GetComponent... ich werd's mir merken
  5. Guten Morgen und danke für die ausführliche Erklärung Verstehe. Das "Problem" hier ist also tatsächliche nur dass leicht Fehler bei der Eingabe passieren können. Ich hätte jetzt erstmal irgendwelche Performance-Einbußen oder sowas in der Richtung vermutet Immer gleich vom schlimmsten ausgehen.
  6. Ne, ganz anders. Die "Fläche" unter mir sind Röhren-Segmente, durch die der Spieler "hindurchfliegt". Den Teil oben habe ich nur zur besseren Ansicht des Trigger-Collider dupliziert. Im Anhang noch mal eine 3-Dimensionale Ansicht. Den Aufbau habe ich mir so gedacht, dass ich 4 Segmente der Röhre habe, jeweils 200 Zähler lang. Sobald der Spieler es passiert hat, springt es um 800 Zähler nach vorne, so dass konsequent immer 4 Röhrensegmente vor dem Spieler liegen. Sorry wenn ich den Aufbau etwas ungenau erklärt hab. Deinen Videolink habe ich vorhin kurz mal durchgeflogen. Danke dir dafür, das gucke ich mir heute Abend auf jeden Fall noch mal genauer an. Nach gut 3 Monaten habe ich mittlerweile die an der Oberfläche kratzenden Grundlagen drauf, aber es folgen noch immer auf jedes gelöste Problem 2 neue Aufgaben. Ist immer ein bisschen Sherlock Holmes spielen, die Fehler zu finden
  7. Ich weiß nicht, was ich gerade frustrierender finde. Dass ich 3 Tage vergeblich rumgebastelt habe um jetzt rauszufinden, dass in meinem Script schlicht und ergreifend ein einziges Plus-Zeichen fehlte, oder dass ich recht hatte und es sich tatsächlich um eine Banalität handelte... Fuuuu... Ich danke dir für den Hinweis, so funktioniert es, genau so wollte ich es haben.
  8. @ Christoph und Sascha. Wieso ist die Identifizierung nach dem Player-Tag denn nicht so gut? Und... wahrscheinlich hab ich jetzt wieder 'n Klops im Kopf, aber die GetComponent sucht doch nur in den eigenen Reihen, oder nicht? Das entsprechende Script liegt doch auf einem ganz anderen Object als jenes, welches durch den Trigger läuft und als Player getagt ist...
  9. Es ist immer sooo ätzend, wenn einen das Anfänger-Dasein einholt... Seit 3 Tagen sitze ich jetzt schon an einer absoluten Banalität, Googlen, YouTube Videos gucken, ausprobieren... Der Frust wächst, ich kriege es einfach nicht gebacken... Für ein Endlos-Level habe ich einen Streckenabschnitt gebaut und wollte als Prefab über einen TriggerCollider vor dem Spieler neu generieren lassen - und hinter ihm natürlich löschen. Nachdem ich daran schon ziemlich gescheitert bin, habe ich irgendwo von einer Realisierung gelesen, wo jemand den Abschnitt einfach über einen Trigger Collider bewegt hat. Sprich, am Ende des Objektes passiert der Spieler den Collider und das Objekt "springt" um seine eigene Länge nach vorne. Kein Generieren, kein Destroyen nötig. Klingt gut, klingt einfach. Die Bewegung habe ich mit Transform.Position auch soweit hinbekommen, aber eben nur als Bewegung auf eine bestimmte Position: transform.position = new Vector3(0.0f, 0.0f, 500.0f) Die Frage ist, wie bekomme ich es hin, dass die jeweils die aktuelle Position mit dem Faktor 500 summiert wird? Klar, über die Transform.Position natürlich nicht. Aber z.B. über Vector3.MoveTowards komm ich irgendwie auch nicht weiter... Das Bild zeigt das Objekt und den Trigger davor. Ist natürlich alles noch nicht final positioniert, ich versuche gerade erstmal die grundsätzliche Funktion hinzubekommen...
  10. Ach herrlich... Funktioniert sofort und ohne Probleme. So gefällt mir das Für alle mit dem gleichen Problem und die durch die Sucher hier gelandet sind: Hier noch mal das Script-Update an entsprechender Stelle: (...) void OnTriggerStay(Collider other) { if (other.tag == "Player") { Debug.Log("Triggered by the Player"); { if (Input.GetKeyDown(KeyCode.Space) && !open) (...)
  11. Oh... okay. Danke. ist tatsächlich das erste mal, dass so einen spezifischen Trigger benötige. Bisher kam ich mit dem allgemein gültigen sehr gut aus :D probiere ich heute Abend direkt aus.
  12. Hallo Leute, ich stehe gerade etwas auf dem Schlauch. Ich habe einen Tresor gebaut, der von Spieler mittels richtiger Kombination geöffnet werden kann (Wird ein Escape-Room-Spiel). Aktuell habe ich schon mal den Tresor, das Öffnen wenn man davor steht, Sounds etc. für die grundsätzliche Funktion gescriptet. Die Nummernsteuerung folgt später. Funktioniert auch alles, alles cool. Wo ich mich aber grad wundere, ich habe dem Trigger-Collider gesagt, dass er sich nur öffnen soll, wenn der Spieler in ihm steht, sprich im Spiel, der Spieler vor dem Tresor. Jetzt die entscheidene Frage: Mache ich das nicht, indem ich den Collider nicht mit "other", sondern mit dem Namen des Spieler-Colliders benenne? Also in meinem Fall mein Männchen "Horst"? (Siehe Zeile 18: "void OnTriggerStay(Collider Horst)" ). Ich habe den Trigger Collider jetzt erstmal vor den Tresor gesetzt, so dass für den Moment alles vernünftig funktioniert und ich an anderen Stellen weiterarbeiten kann. Ist aber eben nur eine temporäre Lösung, da der Tresor durchaus vom Schrank gestoßen oder der Schrank mitsamt Tresor umgeworfen werden kann. Dann ist der Schrank oder Fußboden schon Hindernis genug um ihn zu öffnen zu können - Was natürlich gerade NICHT sein soll... Im Anhang ein Screenshot des Tresors, mit den beiden Collidern (Tresor selbst, und der Trigger-Collider VOR dem Tresor). Und im Folgenden, mein Script so far... Vielen Dank für eure Ideen und Anregungen. using System.Collections; using System.Collections.Generic; using UnityEngine; public class Tresoroeffnen : MonoBehaviour { public GameObject Karatsafe; public Animator anim; private bool open = false; public AudioClip Safesound; void Start() { anim = GetComponent<Animator>(); } void OnTriggerStay(Collider Horst) { if (Input.GetKeyDown(KeyCode.Space) && !open) { open = true; anim.Play("Karatoeffnen"); AudioSource.PlayClipAtPoint (Safesound, transform.position,1); } else if (Input.GetKeyDown(KeyCode.Space) && open) { open = false; anim.Play("Karatschliessen"); AudioSource.PlayClipAtPoint (Safesound, transform.position,1); } } }
  13. Ich danke euch für eure Ideen und Denkanstöße. In der Layermatrix schien irgendwo tatsächlich der Fehler zu liegen. Zwar ist alles in der gleichen Ebene, Default, und in der Matrix waren auch alle Haken gesetzt, aber ein Versuch war' wert. Alle Haken entfernen, Bestätigen, noch mal in's Menü und alle Haken neu setzen, Bestätigen. Und siehe da, alles funktioniert wie es soll. Puuuh... Ich habe noch immer keine Ahnung wo der Fehler herkam, aber ich bin gerade sehr glücklich dass es trotzdem wieder läuft :)
  14. Hmm... Auf dem ersten Blick scheint alles auf dem Default-Layer zu liegen, oder was meinst du? Aber danke für den Hinweis, das werde ich mir heute Abend noch mal genauer angucken.
  15. Hallo Zusammen, ich habe jetzt hier (und auch anderswo) schon mehrfach nach Antworten für mein Problem gesucht, doch dieses spezifische Problem nicht beantwortet bekommen. Die meisten Collider-Probleme waren da auf zu schnelle GameObjects oder zu kleine Collider zurückzuführen - Beides nicht mein Problem. Und zwar ist es bei mir so, dass sämtliche Collider (Box, Cylinder, Mesh...) einfach von sich aus nicht mehr zu greifen scheinen. Als ob die GamePhysik nicht mehr da wäre. Meine GameObjects fallen einfach durch andere Objects (Terrain, Würfel, Plane etc.) einfach hindurch. Selbstverständlich haben alle unbeweglichen Objekte (Boden, Plattform etc.) Mesh- oder BoxCollider, die beweglichen Teile (Props, Items, Player...) ebenfalls und zusätzlich die Rigidbody-Komponente. An den Scripten kann es auch nicht liegen, ich habe noch gar keine. Bisher habe ich lediglich diverse Modelle in Blender gestaltet und ordnungsgemäß nach Unity transferiert. Ich habe auch bereits testweise - direkt in Unity - einen neuen Würfel generiert (BoxCollider, Rigidbody) und ihn über einer Box (BoxCollider) oder einer Plane (MeshCollider (mal mit, mal ohne Convex-Einstellung)) platziert. Also absolut auf die Basis zurück. Und auch hier fällt der Würfel durch beides einfach durch. Dadurch konnte ich Blender und den Import als Verursacher ausschließen. Danach hatte ich das VisualScripting-Tool "Bolt" in Verdacht. Bei der Installation hat es ziemlich viele Unitiy-Grundeinstellungen überschrieben. Meine Vermutung war daher, dass dadurch auch irgendwas grundsätzliches in der GamePhysik überschrieben wurde. Um das zu prüfen habe ich eine komplett neue Datei angelegt, Test mit Würfel und Plane/Box wie oben beschrieben. Funktioniert ohne Probleme. Bolt installiert, noch immer keine Probleme. Nachträglich, MIT Bolt im Hintergrund, die Testobjekte noch mal neu erstellt. Hier ebenfalls keine Probleme, der Würfel landet sauber auf dem Boden und bleibt liegen. Somit kann ich Bolt als (grundsätzlichen) Fehler-Verursacher ebenfalls ausschließen. als letztes habe ich dann bei dem funktionierenden Testprojekt und meinem Projekt die Preferences von Bolt und Unity selbst, ebenso wie Würfel und Plane verglichen - Alles identisch... So langsam gehen mir echt die Ideen aus wo der Fehler liegen könnte... Habt ihr vielleicht noch einen Ansatz den ich versuchen könnte? Danke im vorraus.
×
×
  • Create New...