Jump to content
Unity Insider Forum

All Activity

This stream auto-updates

  1. Yesterday
  2. Last week
  3. Nicht unbedingt. Der Ressourcen-Ordner ist, wenn du mich fragst, auch für 98% der Probleme eine schlechte Lösung. Einfach schon, weil man Strings zum Identifizieren der Assets benutzt. Meistens besser: Ein serialisiertes Feld anlegen (wenn nicht bekannt: einfach "public GameObject prefab;") und da dein Prefab im Inspektor rein ziehen. So ein GameObject hat, wenn du nicht Shakespeare in eine Komponente rein pastest, nicht mal ein KB groß. Mach dir mal nicht wegen drei GameObjects um deinen Speicher Sorgen. Tatsächlich gibt es eine Technik Namens "Pooling", die Objekte recycelt, also deaktiviert und dann wieder re-aktiviert, anstatt ein neues Objekt zu instanziieren, weil Zerstören und Instanziieren weitaus schlechter für die Performance ist als zeitweises Deaktivieren. Nicht, dass das für dich einen Unterschied machen sollte, daher einfach weiter im Kurs - aber ich konnte das nicht stehen lassen, ohne den Samen des Zweifels an dieser Ansicht zu sähen
  4. Jaaaa, danke... ich habe eingegeben als Beispiel MyGameObject.Des... und verzweifelt auf ein Destroy gehoft, bin aber nie auf die Idee gekommen Destroy selbst zu schreiben. Manchmal ist echt sooo einfach 😇 Danke schön 🙂 Gruß Andy
  5. Guck mal hier : https://docs.unity3d.com/ScriptReference/GameObject.html Unter den Static Methoden findest du Destroy. Wenn du da mal drauf klickst findest du einige Beispiele. Da siehst du dann wie und was alles zerstört werden kann. Der normale Destroy-Befehl wird am Schluß eines Zyklusses vollzogen. Also alles was dann noch in der Update des Objektes zu tun ist, wird auch sauber gemacht. Du kannst also ein Gameobjekt, wenn dein Script eine Referenz daraf gebildet hat, von der Ferne zerstören, oder es sich selbst zerstören lassen. So kann das Objekt, wenn es zerstört wird, z.B. selber noch ein Explosions-Objekt instanzieren, welches sich wiederum auch selber zerstören kann. Es gibt auch noch das DestroyImmediate, was ein Objekt sofort zerstört. Also auf der Stelle! Das solltest du aber nur Nutzen wenn du Editordinge machst, sonst nie!!! Im Spiel würden dann nämlich Referenzen zu diesem Objekt nicht gelöscht werden und dann wird es unweigerlich irgendwann zu Fehlermeldungen und evtl. zum Crash kommen. Also einfach nur das Destroy nutzen.
  6. Toll, jetzt war diesmal innerhalb von 1 Sekunde der Post gesetzt 😆
  7. Mahlzeit 🙂 ich habe mir ein kleines C#-Script geschrieben, dass mir ein Grid erzeugen soll mit beliebigen Prefabs. Funktioniert auch alles. Jetzt möchte ich eine Methode schreiben, die z.B. bei Zeile 5, Spalte 5 das GameObject entfernt und ein anderes einsetzt. Ich glaube auch bereits auf dem richtigen Weg zu sein. Die Prefabs müssen glaube ich zur Laufzeit in einem Ressourcen-Ordner sein. Da habe ich auch mein zweites Test-Prefab angelegt und es wird auch geladen. Jetzt habe ich nur das Problem, ich weiß nicht wie ich das "alte" GameObject zerstören soll. Soweit ich gelesen habe gibt es die SetActive(false) Methode. Aber, ich möchte es nicht deaktivieren, ich möchte es komplett ersetzen. Schon alleine wegen dem Speicher und der Performance. Gruß Andy PS: Wieso dauert es bei mir eigentlich mehrere Minuten (und ich übertreibe nicht) bis der Post gepostet wird? Der Kreis dreht sich, und dreht sich, und dreht sich...
  8. Guten Morgen, wollte nur mal als Rückmeldung geben: Habe es geschafft 🙂 Muss allerdings zugeben, ich war mit dem Ergebnis leider doch nicht sooo zufrieden, da es die Bedienung doch erheblich erschwert hat. Idee und Ansatz gut, aber Bedienung könnte eher zum Frust werden wenn man mit beiden Händen gezielt arbeiten muss. Die Gefahr sich zu "verklicken" ist doch zu groß, leider. Sah aber nicht schlecht aus, und hab jetzt einiges mehr gelernt, was für mich die Hauptsache ist 🙂 Gruß Andy
  9. Es ist sonst zu leicht und der Spass dauert dann nur 2,5 Minuten, das ist zu einfach. Habe ja auch 3 Heilungsitems in der Map verteilt. 🙂
  10. Die Alpha-Version vom ersten Boss ist fertig. Die Grafik für den Boss habe ich selber erstellt, aus bestehenden Grafiken aus dem Internet. Der Boss wird noch mehr Hitpoints bekommen als im Video:
  11. Earlier
  12. Hallo, ich habe eine Camera mit diesen Einstellungen: Clear Flags = Solid Color Target Texture = RenderTexture Das GameObject hat ein Material mit diesen Einstellungen: Shader = Standard Rendering Mode = Apaque Wird ein Transparentes Material mit "Rendering Mode = Fade" verwendet, nimmt die Camera kein Bild mehr auf bis die "Clear Flags = Don't Clear" eingestellt sind. Muss die RenderTexture bei dieser Camera-Einstellung, vor jeder Rotation des GameObject, manuell gelöscht werden? Oder übersehe hier etwas?
  13. oskar

    Flugzeug spiel

    import pygame import sys # Initialisierung von Pygame pygame.init() # Bildschirmgröße screen_width = 800 screen_height = 600 # Farben black = (0, 0, 0) white = (255, 255, 255) # Erstellen des Bildschirms screen = pygame.display.set_mode((screen_width, screen_height)) pygame.display.set_caption("Flugzeugspiel") # Spieler Flugzeug player_img = pygame.image.load('player.png') player_x = 370 player_y = 480 def player(x, y): screen.blit(player_img, (x, y)) # Spiel Schleife running = True while running: for event in pygame.event.get(): if event.type == pygame.QUIT: running = False # Bewegung des Spielers keys = pygame.key.get_pressed() if keys[pygame.K_LEFT]: player_x -= 5 if keys[pygame.K_RIGHT]: player_x += 5 # Hintergrundfarbe setzen screen.fill(black) # Spieler zeichnen player(player_x, player_y) # Bildschirm aktualisieren pygame.display.update() # Pygame beenden und das Programm schließen pygame.quit() sys.exit()
  14. Hallo, dein Hinweis war ein Volltreffer - wenn ein canvas im Editor (oder per Skript) deaktiviert wird, gehen alle drei scales auf 0. Unschön ist, dass der Prefab-Clone diese scales behält ... Vielen Dank!
  15. Komisch. Dieser Quest Display Clone ist dein Prefab? Hast du mal geschaut, ob der Skalierungsfaktor des Clones noch bei 1,1,1 steht? Das ist nur so ins blaue gedacht, aber ich habe die Erfahrung gemacht, dass gerade der Skalierungsfaktor gerne mal auf 0,0,0 geht, wenn man UI Elemente von einem Überobjekt nimmt und in ein anderes Überobjekt schiebt. Das kan alles mit dem dynamischen Skalieren des Canvas zu tun haben, welches ja zur Laufzeit geschieht. Da zu sein scheint jedenfalls alles. Das Textobjekt ist da und mit richtigen Werten gefüllt. Die Frage ist nur, warum man es nicht sieht. Ist es an anderer Stelle oder ist eben der Vatter auf 0 skaliert.
  16. Ich habe zwei Screens gemacht - der erste zeigt das Resultat bei der Initialisierung mit deaktiviertem Questcanvas. Für beide Quests wurde ein Prefab instanziert und korrekt mit den jeweiligen Texten gefüllt. Der zweite zeigt das Questpanel nach einer Initialisierung bei aktiviertem Questcanvas - so wie es sein soll. Merkwürdig ist die unterschiedliche Positionierung der Questanzeigeprefabs im Editorfenster - bei gleichen RectTransform-Werten. Generiert werden die Anzeigeprefabs in beiden Fällen - es scheint also nicht an der Generierung zu liegen. Der einzige Unterschied zwischen beiden Screens ist, das einmal das Questpanel inaktiv und einmal aktiv ist ... [edit] ich habe gerade gesehen, das im ersten Screen der QuestTitelText nicht mehr im Editorfenster ausgewählt ist - die unterschiedliche Position also andere Gründe haben kann
  17. So ganz kann ich dir nicht folgen, aber es scheint so zu sein, dass es das Generieren ist, welche die Probleme bereitet, weil du das wohl von dem Verwaltungsscript aus anstuppst. Wie wäre es, wenn diese Teilbereiche sich selber organisieren sobald sie aktiv werden? Das ginge sehr gut mit OnEnable(), weil das immer aufgerufen wird, sobald das Script enalbled wird. Und es wird immer dann enabled, wenn das Gameobject aktiviert wird. Es ist immer eine Frage des Designs. Entweder hat man ein Objekt (Verwalter), welches andere Objekte (Sklaven) kennt und ihnen sagt, was zu tun ist oder sie sogar aktiv verändert. Oder man hat ein Objekt (Anzeiger) welches nur Infos bereitstellt und die anderen Objekte (Autonome) organisieren sich aufgrund der Informationen komplett selbst. Beide Wege haben Vor- und Nachteile.
  18. Hallo, Danke für die Rückmeldung. Hier eine genauere Beschreibung: Es handelt sich um ein Questlog, das auf 2 panels (aktuelle und gelöste Quests) abgebildet wird. Die Hierachie: ein Empty mit dem QuestlogDisplay-"Verwaltungsskript", child 1 ist ein canvas, das voreingestellt inaktiv ist. Child 2 ist ein weiteres Empty, das wiederum die beiden panels (von denen das gelöste-Quests-Panel voreingestellt inaktiv ist) und das tabulatorpanel als childs hat. Beim Spielstart werden die gespeicherten offenen und die erledigten Quests vom Questmanager an das QuestLogDisplaySkript übergeben und von diesem wird für jede Quest ein Logdisplay von einem Prefab für die Textanzeige in dem betreffenden Panel als child generiert und die einzelnen Textelemente gefüllt. Im Spielverlauf können natürlich neue Quests dazukommen bzw erledigte müssen auf den offene-Quests-panel gelöscht werden. Zu deiner Eingangsfrage: aktualisieren bedeutet einerseits neue Logdisplays zu generieren, ggf erledigte Questlogdisplays im offene-Quests-display löschen bzw bei erledigten Teilquests den betreffenden Text zu aktualisieren. Ich habe in der Zwischenzeit weiter herumprobiert und festgestellt, das eine kurze Aktivierung des Questcanvas ingame nicht sichtbar ist. Da für eine Aktualisierung der beiden panels diese ggf auch aktiviert werden müssen, musste ich allerdings in das QuestLogDisplaySkript eine bool mit den zugehörigen Abfragen einbauen, um die letzte Panelauswahl des Spieles zu sichern, was natürlich extra Aufwand und somit unschön ist. Eine Aktualisierung der Panels mit deaktiviertem canvas hat zwar keine Fehler, aber leere panels ergeben. Grüße Malthea
  19. Hi! Die Frage ist, was du mit aktualisieren meinst. Willst du ne Grafik oder einen Textaustauschen? Das sollte auch im nicht akitven Element funktionieren, wenn du ds von Außen, also einem anderen Script machst und eine Referenz zu diesem UI Element besteht. Also: Ein Script hat eine Referenz zu einer Text Komponente. Also eine Text Variable (nennen wir sie mal myText). Diese Variable muss gefüllt sein damit es geht. Ist die Variable public, kannst du einfach die Text Komponente im Inspector auf die entsprechende Variable fallen lassen. Jetzt kennt dein Script das Element, egal, ob das Objekt aktiv ist oder nicht. Es könnte auch sein, dass du nur das Gameobjekt kennst, welches du ja per SetActive schaltest. Dann suchst du halt in diesem Gameobjekt nach der Textkomponente und weist sie einer Variable zu. myText= DasObjekt.GetComponent<Text>(); Nun könntest du im Script ganz einfach zu irgendeinem Zeitpunkt sowas tun: myText.text= "Test"; Die Textkomponente hat jetzt in seinem Textfeld diesen Text bekommen. Mit Grafiken geht das genauso. Alles was du kennst kannst du verändern. Du musst es nur vorher kennen. Ist ein Objekt deaktiviert, findest du es nicht zur Laufzeit und kannst keine Referenz dazu bilden. Ist die Referenz aber schon da, dann kommst du auch da ran.
  20. Hallo, ich suche nach einer Möglichkeit, die childs eines UI-Elements, das mit SetActive(false) deaktiviert wurde, zu aktualisieren. Für die Initialisierung beim Spielstart löse ich das, indem ich das UI-Element für die Initialisierung aktiviere. Bei erforderlichen Aktualisierungen im laufenden Spiel möchte ich nicht, dass das UI-Elemnt sichtbar wird. Ich könnte das über eine Verschiebung des UI-Elements aus dem gerenderten Bereich lösen, hoffe aber, das es eine bessere Möglichkeit gibt. Grüße Malthea
  21. Mahlzeit, wow, dass war jetzt sehr ausführlich und ich werde mich am Samstag gleich mal daran setzen 🙂 Vielen Dank schon mal und ich gebe dir eine Rückmeldung 🙂 Grüße aus Berlin Andy
  22. Moin! Du willst also deine UI auf der Plane anzeigen und die Plane ist ein 3D Objekt im Raum, die deiner Hand folgt. Kein Problem. Zum Testen machste mal eine einfache neue Szene und Erzeugst so eine Plane und richtest die So aus, dass du sie mit der Kamera im Game View sehen kannst. Die brauchen wir gleich. Jetzt erzeugst du ein Canvas. Da stellst du erstmal gar nichts ein. Aber wenn du dir die Eigenschaften im Inspector anschaust, dann siehst du, dass der Canvas im Render Mode auf "Screen Space Overlay" eigestellt ist. Alles was demnächst an UI Objekten dem Canvas untergeordnet ist, wird wie eine Folie auf die Kameralinse gepatscht. Nun da der Cancvas da ist erzeugst du einfach 4 UI Images. Denen brauchst du keine Textur geben, weil wir wollen einfach nur die Dinger sehen und da reicht es, dass sie einfach weiß sind. Schiebe die 4 Images an unterschiedliche Positionen, Einfach so dass es wie ne 4 auf nem Würfel aussieht. Soweit alles gut. Du solltest deine Plane irgendwo im Bild sehen und natürlich auf die 4 weißen Quadrate. Jetzt schaltest du den Canvas im Render Mode auf "World Space" um. Je nachdem, wo deine Camera im Raum liegt und wie sie ausgerichtet ist, siehst du die UI Elemente weiterhin, oder eben nicht. Macht nichts. Weiter gehts. Ein Canvas, ist ein GameObject, welches du im Raum bewegen kannst. Du kannst es auch anderen Objekten unterordnen! Und das tust du jetzt. Ordne den/die/das Canvas der Plane unter und stelle im Inspector die Rect Transform Koordinaten auf 0,0,-0.5 ein. ( Z ist also etwas nach vorne geschoben). The Canvas liegt jetzt genau auf deiner Plane und wahrscheinlich sind die UI Elemente jetzt riesengroß. Das macht aber nichts. Das kann man einstellen. Im Inspector vom Canvas siehst du die Bereiche Rotation und Scale. Die Werte bei Rotation sollten auf 0,0,0 stehen. Falls es nicht so ist, dann stelle sie so ein. Im Bereich Scale stehen jetzt irgendwelche Werte. Die musst du wahrscheinlich verkleinern. Aktivier dafür die Klammer vor den Werten (Das ovale Symbol mit dem Schrägstrich) und stelle dann beim X sowas wie 0.001 ein. Nur mal zum Test. Alle 3 Werte sollten sich jetzt verändert haben und deine UI sollte jetzt viel kleiner sein und auf deine Plane passen. Welchen Skalierungsfaktor du jetzt wirklich bruachst, kann ich nicht sagen. Das findes du aber raus. Kleine Info noch: Die Werte für Width und Height am Canvas zu ändern bewirkt nichts. Bei den UI Elementen innerhalb des Canvas macht das was aus. Aber der Canvas selbst ist ein Imaginäres Dingen, was jetzt lediglich Koordinaten im Raum und einen Skalierungsfaktor im Bezug zum Vaterobjekt hat. Dein Canvas ist jetzt also Kind der Plane und die Elemente schweben leicht über der Plane. Wenn du diese Plane im Raum bewegst oder drehst, werden die UI Elemente mitgenommen. Das sollte in etwa das sein, was du haben willst. Um jetzt mit den UI Elementen interagieren zu können, musst du die entsprechende EventCamera in den Slot legen. Wie das da bei deinem VR Dingen ist, weiß ich leider nicht. Da bin ich raus! Du solltest jetzt aber alles so hinkriegen, wie du es willst.
  23. Ich habe beschlossen, die Pixel Skys zu kaufen und auszuprobieren. Kostet ja nicht viel, ist mir den Versuch wert.
  24. Habe jetzt mal ein Video hochgeladen bei YouTube... Vielleicht versteht ihr jetzt, was ich meine mit meinem Handgelenk und dem Plane 🙂 https://youtu.be/wEcB5-KgXqU Gruß und schönes Wochenende euch noch 🙂 Andy
  25. Guten Abend 🙂 genau so habe ich auch gesucht, so ist es ja nicht. Aber, und bitte bedenkt dabei, ich bin ein kompletter Neuling was 3D angeht, Game Engines etc. in den ganzen Beispielen waren die UI-Elemente bzw. das Canvas z.B. an eine feste Wand gelegt worden. Ich habe aber ein Hand-Gelenk, wo die Plane angezeigt wird. Und natürlich ist mein Handgelenk die ganze Zeit nicht ruhig. Ihr müsst euch das so vorstellen: Ich möchte versuchen das ich mein Handgelenk so drehe, als würde ich eine Uhr ablesen wollen. Aber, statt einer Uhr, kommt ein Menü, wo ich eine Auswahl treffen kann, z.B. Farbe ändern, anderes Auto setzen oder sonst was. Ich versuche euch mal meinen Denkfehler zu demonstrieren. Ich habe einen Controller, als Child habe ich eine Plane und wenn ich den Trigger drücke, erscheint in der VR auch die Plane an meinem Handgelenk. Naiv wie ich bin, dachte ich, wenn ich als nächstes Child das Canvas lege und darauf dann die UI-Elemente, dann werden diese auch auf der Plane angezeigt. Aber, wie gesagt, ich bin da wohl etwas zu naiv rangegangen. Mein Audi RS6 war in der Welt (Editor) plötzlich klitzeklein, das Canvas riesig und komplett (Kilometerweit) entfernt, und als Krönung sehe ich einen Orangenen Pfeil in die eine Richtung und einen weißen Pfeil zurück in die andere Richtung. Ich verstand ehrlich gesagt die Welt nicht mehr. Ich hatte ehrlich gesagt erwartet das sich das Canvas an das Plane richtet, welches sich wiederum an die Position von meinem Controller richtet. Fragen wir mal andersrum: Wie würdet ihr vorgehen? In der Hoffnung das ich es verstehe. Ich bin wirklich sehr lernfähig und interessiert 😇🥰 Gruß Andy PS: Ich wollte mal ein Video anfügen, hat aber leider nicht geklappt...
  1. Load more activity

Announcements

Hy, wir programmieren für dich Apps(Android & iOS):

Weiterleitung zum Entwickler "daubit"



×
×
  • Create New...