Jump to content
Unity Insider Forum

Unifier

Members
  • Content Count

    14
  • Joined

  • Last visited

Community Reputation

1 Neutral

About Unifier

  • Rank
    Member
  1. Hi Sascha, du hast Recht. Der Aufruf zur ChangeScene() erfolgte durch eine AnimateText() Funktion, welche wiederum in der FixedUpdate Methode stand. Mit dem boolschen Wert ist das Problem nun gegessen. Obwohl ich sonst immer viel mit Debug.Log arbeite, habe ich das hier irgendwie verschlafen..... Thema geklärt, Danke schön!
  2. Hi Leute, hoffe das ist das richtige Unterforum. Wenn nicht: Bitte ins richtige verschieben, Danke! Ich habe zwar online gesucht, konnte aber nichts dazu finden. Folgendes: Am Ende habe ich im Projekt vielleicht maximal drei Szenen. In den BuildSettings sind momentan zwei drin, die Intro Szene und die Spielszene. In der IntroSzene steht: public void changeScene() { //SceneManager.LoadSceneAsync("FirstRoom_v33"); SceneManager.LoadSceneAsync(1); } Wie ihr seht habe ich schon vom Namen weggewechselt auf den Index der Szene in den Build-Settings - das brachte keine Abhilfe. Sobald das aufgerufen worden ist, iteriert der Editor oder das Build durch eine Unmenge von Kopien der Szene (hinten dran steht "not loaded" ). Wenn durch alle diese Kopien (immer unterschiedlich viele.....) durch ist, dann bin ich da, wo ich gerne direkt wäre: In der eigentlichen Szene Ich hänge mal zwei Screenshots an, damit deutlicher wird, was ich meine. Danke vielmals!
  3. Hi, wie der ein oder andere vllt. weiß arbeite ich an einem Konzeptspiel, um diverse Konzepte gegeneinander zu evaluieren. Darunter fällt der Zeitfaktor (Stress und so .... ) Zuerst habe ich angefangen mit dem System.Timer. Irgendwann war ich soweit fortgeschritten, dass es nicht mehr ohne größeren Aufwand zu ändern war. Und jetzt stehe ich davor, es zu ändern, weil es durchaus Murks sein könnte, wie es momentan ist. Idee: Für das Spiel gibt es einen Timer. Ob der nun negativ ist (Von Intervall X runter auf 0 zählt) oder postiv ist (von 0 hochzählt auf Intervall) ist erstmal egal - was einfacher ist. Die Sache ist, grundsätzlich funktiert der ja gut. Soweit so gut. ABER: Man kann halt nicht auf den aktuellen Wert zugreifen. Man kann ihn nur anhalten, starten, enablen, disablen und rausfinden ob er abgelaufen ist (um dann eine Aktion auszulösen). Das wird dann zum Problem, wenn ich das auch grafisch ausgeben möchte. Das hatte ich also so gelöst, dass ich einfach einen float Wert genommen habe mit demselben Wert wie der Timer und diesen per Update (das war eh Quatsch, wenn dann natürlich FixedUpdate nutzen) per Time.Delta dekrementiert habe. Leider wird das nach kurzer Zeit inkonsistent zwischen internem Timer und dessen Ereignis und dem dargestellten Zeitwert. In diesem Thread schreibt der Autor, dass er auch einen Timer benötigt. War auch der einzige Thread, den die Suche ausgespuckt hat. Dort Spricht @Tiwaz auch von der Stopwatch. Die kannte ich bisher nicht und werde mich damit nun auseinandersetzen. Szenario: 1. Timer: Ohne Aktion seitens des Spielers und nach Ablauf wird das Spiel neugestartet 2. Timer: MIT Aktion des Spielers soll der erste Timer gestoppt werden und der zweite gestartet werden. Nach Ablauf des zweiten Timers soll der zweite Timer aufhören, den Wert soll ich auslesen können und dann soll der erste Timer wieder einsetzen. All das soll im Idealfall so ablaufen, dass ich beide Werte auch in einem Canvas per Text ausgeben kann. Generell ist die Frage also diese: - Ist die Stopwatch dafür besser geeignet als der Timer? - Spricht etwas gegen das Nutzen von der float Variable und dem Inkrement/Dekrement per FixedUpdate Methode? (vllt. liege ich falsche aber gedanklich scheint mir diese Idee am einfachsten zu sein von wegen Zugriff usw.... ) Ich hoffe ich konnte das einigermaßen verständlich rüberbringen.... Schon mal Danke vorab für die investierte Zeit des Lesens! Viele Grüße Mark
  4. Hi, ich sehe nicht ganz den Vorteil davon, dem Würfel noch ein leeres Parent GameObject zu geben und das Skript daran zu hängen. Warum nicht das Skript (das ja für den / die Würfel geschrieben worden ist) direkt an das Würfel Object hängen? So hätte (ähm... habe) ich das gemacht bisher....
  5. Hi Ikarus und Zer0, leuchtet beides ein. Ich habe es jetzt so gelöst, dass ich einfach im Skript des Bodens abfrage, ob ein Würfel kollidiert ist. Dass ein Würfel nur verschoben wird und nicht herunterfällt, ist so natürlich nicht abgedeckt. Aber ich hatte bisher keinen solchen Fall. @Zer0: War aber so... und am Ende sind es 120 Objekte und nicht nur 30. Daher hatte ich den Ansatz nicht weiter verfolgt. Viele Grüße Mark
  6. Hi, die Idee ist die, dass jemand die aufgestapelten Würfel umschmeißt um damit seine Antwort "zu starten". Hintergrund: Wenn sich also etwas geändert hat, dann gehe ich davon aus, dass der Spieler versucht möglichst viele von den Würfeln umzuwerfen. - Wird nichts geändert, kennt der Spieler die Antwort nicht oder er will aus sonstigen Gründen nicht antworten. Denn wenn sich was geändert hat, soll ein Timer einsetzen - x Sekunden. Nach Ablauf überprüfe ich, ob a) der minCount erreicht ist und nur wenn ja ob es der richtige Ständer war (der die richtige Antwort repräsentiert). Entsprechend bekommt der Spieler positives oder negatives Feedback. Durch Code werden die Würfel nur wieder in Ihre Ursprungsposition befördert, sodas eine neue Runde gespiellt werden kann. Von der Ursprungsposition weg werden sie nur durch Spielereinfluss bewegt. Topic: "wenn es angestoßen wird, oder wenn der User etwas verschiebt" "Es in der Update-Methode oder FixedUpdate-Methode zu machen wäre dagegen nicht so performant, aber auch möglich." --> Genau darum geht es . Ich denke das geht nur über die Update-Methode... wie sonst soll man die Lageänderung erkennen ? (wenn nicht manuell angestoßen) Meint ihr, die Update oder FIxedUpdate ist hierfür besser geeignet? Ich nehme vorerst mal die Update() Das zweite große Probleme ist, dass ich am Ende vier von den Ständen habe werde - und würde natürlich gerne das Skript nur einmal haben und dann an jeden der 4 Ständer hängen. Nur geht das natürlich nicht, da die Würfel der Kopien der Ständer ja dieselben Objektnamen haben werden. Nun könnte ich 30 public Variablen machen, bei jedem Stuhl die Würfelnamen ändern und manuell da reinziehen. Geht das nicht auch schöner und einfacher? Oder Anders gefragt: Kann ich die Würfelobjekte in dem Skript irgendwie identizifieren z.B. im Format GameObject.Find("nameOfObjectWithAttachedScript/"+"childObjectName/"+"childObjectName/"+"cubeNumberXX"); Gefunden: this.gameObject.transform.parent.gameObject.name Damit mache ich einfach eine einzige boolsche Variable in das Mutterskript und hänge das Änderungsskript an jeden Wüfel - andert sich was am Würfel, ändert er die Variable und ich kann den Timer starten Danke Euch sehr! EDIT: Ein weiteres Problem mit der Feststellung der Position: Durch das "Neuaufbauen" der Klötze schwanken sie durch die Physik kurz hin und her, bis sie sich stabilisert haben. Somit würde nach dem Reset der Klötze eine Lageänderung festgestellt, obwohl nur der Reset statt gefunden hat und der Spieler nichts unternommen hat (false positive). Schätze mal das wäre am Besten mit einem Yield / IEnumerator zu umgehen..... Geprüft: Mit dem Yield und 2 Sekunden (1 Sekunde ist zu wenig) geht es EDIT2: Schätze damit ist das Thema hier gelöst EDIT3: Schade - das frisst bereits ab 10 Objekten derart viele Resourcen, dass die FPS auf unter 30 einbrechen. Mit allen aktiviert kreucht man so bei 15 FPS rum - für VR nicht akzeptabel. Sieht jemand noch eine andere Möglichkeit, das zu realisieren? Ich muss das ja nicht in jedem Frame prüfen. Alle 2 Sekunden dürfte reichen..... https://docs.unity3d.com/ScriptReference/MonoBehaviour.InvokeRepeating.html Ich habe nun InvokeRepearing in die Update geschrieben - das bringt zu meiner Verwunderung auch nichts. So wie ich das sehe sollte dadurch die Evaluation nur alle 3 Sekunden stattfinden - stattdessen ist Unity damit komplett am Boden, obwohl im Taskmanger nur 13% Auslastung herrscht.
  7. Hallo Leute, dieser Thread soll in erster Linie entweder etwas bestätigen oder widerlegen und ggf. Verbesserungsvorschläge hervorbringen. Ich nehme nochmal Bezug auf das (mein) Würfelproblem: Man hat ein Brett mit ca. 30 Würfel in Ausgangsposition. Diese kann ich bestimmen, und sofern alle in dieser sind / bleiben hält eine Variable bool noChange = false. Ändert sich aber nur ein einziger Würfel seine Position / Rotation, so ist es offenkundig nicht mehr die Ausgangslage und die Variable soll true werden. Der erste naive Ansatz: So wie ich das sehe müsste man dafür 30 Vektoren (startPos01 - startPos30) anlegen (lassen wir die Rotation mal aus dem Spiel) und die Objektpositionen da reinschreiben. Nun prüfe ich fortwährend für ALLE Objekte, ob sich die aktuelle Position von der startPosition unterscheided und setze die boolsche Variable entsprechend. Man bedenke: Am Ende wird es nicht bei einem solchen Rack bleiben, sondern es werden 4 sein. Mir kommt das irgendwie ein bisschen "overengineered" vor und im Verhältnis relativ aufwendig, aber ich sehe aktuell auch keine andere Möglichkeit das zu realisieren.... Vielen Dank vorab!
  8. Hallo Ikarus, Danke für den Eintrag. Leider hilft mir das auch nicht wirklich weiter (die Zylinder lassen sich auch weiterhin nicht stapeln). AAAABER: Was Andreas sagt, dürfte der Casus Knacksus sein - es liegt am Capsule Collider für den Zylinder. Daher nehme ich jetzt der Einfachheit halber schlicht eckige Klötze statt runder. Muss vorerst reichen. Dass ich da nicht selber eher drauf gekommen bin...... :DOH: Also nochmal Danke an alle Helfenden EDIT: Das war ja jetzt erst der Anfang - nun muss ich noch alles gescheit stapeln und ausrichten. Daher Folgefrage: Da ich ja 4 von den Ständen brauche (wegen des Quizz-Systems) und ich alleine bei einem Stand bereits ca. 20-25 Ziele haben werde - spricht doch nichts dagegen, das Ganze als Prefab zu speichern, oder? Oder wären Probleme zu erwarten weil nun wieder keine Kindobjekte usw.?
  9. Okay, das mit den RBs und Collidern mit beweglichen Objekten nehme ich einfach mal so an. Hab noch bisl weiter recherchiert und ist wohl Best Practice. "Deswegen, sollte zu Beginn ein kleiner Spalt zwischen den Kollidern sein, damit die Körper aufeinander fallen können und nicht schon durchdrungen sind, wenns los geht." Genau das ist das Problem: Ob ich nun einen kleinen Spalt und viel Platz lasse - die Zylinder durchdringen das Brett sofort. Ich habe dem Brett wieder ein RB angehängt, es ist jetzt non-gravitational und kinematic. Die Zylinder nutzen Gravity und sind nicht kinematisch. Ohne die korrekt aufgebauten Zylinder brauche ich gar nicht weiter machen..... an der Dicke des Brettes hängt es schon mal nicht. Ideen?
  10. Hallo Andreas, das stimmt. Es ist so, dass der Grundkörper mehrere Kinder hat, eines von denen der "Zylinderhalter" auf den ich dann die ca. 10 bis 15 Zylinder abgelegt hätte - sodass ich dann wiederum das ganze Gerüse einfach rotieren, translatieren und kopieren kann (so zumindest die Idee / der Wunsch). Sobald ich den Zylinder aus dem Grundkörper heraus in die root-Hierarchie verschiebe, verzerren sie sich nicht. Schon mal danke für den Hinweis. Weißt du, ob das Verhalten auch mit einem Prefab auftreten würde? Wenn nicht, probiere ich es aus und berichte In dem Zuge findet sich ein neues Problem: Das "Brett" (=der Quader) , auf dem die Zylinder positioniert werden sollen, hatte zuerst einen RigidBody. Problem: Selbst wenn ich die Zylinder präzise (zumindest laut Augenmaß) auf dem Brett abstelle - bei Play verhalten sich die Zylinder, als hätte man sie aus 10cm Höhe herabfallen lassen. Nehme ich den Rigidbody raus - dann gleiten die Zylinder durch das Brett durch. Obwohl es einen Collider hat. Verstehe ich nicht ..... Wer hätte gedacht, dass so eine scheinbar einfache Aufgabe so viel Zeit kostet....
  11. Hi Leute, in einem Teil meines Projektes möchte ich Quizfragen - 1 Frage mit bis zu vier Antworten - mappen auif so eine Art Wurfstand wie man sie von der Kirmes / Kerwe / Messe / Volksfest kennt. Das ganze wird in VR umgesetzt. Also der Spieler nimmt entweder einen Ball oder einen Markierer und zielt auf den Stand, der seiner Meinung nach die richtige Antwort repräsentiert. Fallen ausreichend Zylinder in den Auffangbehälter, wird getriggered und die Antwort ausgewertet. Leider scheitere ich bereits am Basteln des Wurfstandes. Zwecks Physik bekommen die Zylinder einen Rigibody. Aus ungeklärter Ursache verformen die Zylinder bei Spielstart aber. Woran liegt das? Am Scaling der Zylinder? Am Rigidbody? Am Zylinder selbst? Ein ähnlich aufgebauter Würfel zeigt dieses Verhalten nicht.... und ein Verstellen der Masse hat auch nichts verändert. Ich habe zwei Screenshots angehängt. Der erste ist vor dem Start, der andere danach. Wie ihr erkennt, werden beide Zylinder verzerrt, der linke fällt zu Boden (da gravity aktiviert ist). Wenn ihr Fragen habt, schießt los! Für Input bin ich dankbar! Viele Grüße Mark
  12. Suuuper weird - ich habe am Code nichts geändert, plötzlich gehts. Extrem merkwürdig. In dem Sinne kann ich nur sagen Danke für Eure Mühe und: Das kann ich bestätigen, habe ich auf deinen Post hin probiert, es geht mit ' als auch mit ` sowie am Ende mit und ohne Semikolon. Interessant! Nochmal Danke an alle für die Unterstützung Grüße Mark
  13. Hi Leute, Danke für die vielen Antworten! Ich bin jetzt dran und arbeite das ab, melde mich später nochmal dazu.
  14. Hallo Community! Folgendes Problem: Ich möchte eine Verbindung zu einem MySQL Server aufbauen und von dort Daten abrufen. Eigentlich keine große Sache, allerdings bin ich jetzt schon seit 2 Wochen dran und es geht einfach nicht, keine Ahnung mehr woran es liegt. Ich habe es jetzt in die kleinsten Bestandteile aufgebrochen. Der Fehler der kommt ist: "MySql.Data.MySqlClient.MySqlException: Reading from the stream has failed. ---> System.IO.EndOfStreamException: Failed to read past end of stream." Nun werdet ihr sagen: Geh zu google und schau was da kommt. Danke, so weit war ich schon. Ganz gute Einträge finden sich hier: https://bugs.mysql.c...ug.php?id=75917 https://bugs.mysql.c...ug.php?id=76597 und speziell: https://forum.unity3...th-mysql.63364/ Mit dem letzten Link bin ich ursprünglich an die Sache ran gegangen und habe dann den Code immer einfacher gestaltet und dann wiederum weitere Beispiele mithinzugenommen. Die Sache ist: Alles was dort beschrieben ist leuchtet ein, und dennoch geht es nicht. Kann auch gut sein, dass der Fehler offensichtlich ist und ich ihn einfach nicht mehr wahrnehme. Der Connection-String stimmt: Ändere ich den Port, den Nutzer oder das Passwort, quittiert der Server das logischerweise mit: "Es konnte keine Verbindung hergestellt werden, da der Zielcomputer die Verbindung verweigerte." Stimmen aber die Daten und ich will nur eine ganz einfache Abfrage zur Version, kommt immer und immer wieder: "MySql.Data.MySqlClient.MySqlException: Reading from the stream has failed. ---> System.IO.EndOfStreamException: Failed to read past end of stream." Ich hänge mal den Code der Testdatei an. Wäre schön, wenn jemand was beisteuern kann. Ziehe jetzt erstmal geknickt von dannen. Vielen Dank vorab! Mark EDIT: Wenn das Thema hier in dem Unterforum falsch ist, bitte verschieben @ Mods sc_MySQL_Simplest.txt
×
×
  • Create New...