Jump to content
Unity Insider Forum

malzbie

Moderators
  • Posts

    5,561
  • Joined

  • Last visited

  • Days Won

    426

malzbie last won the day on February 25

malzbie had the most liked content!

2 Followers

About malzbie

  • Birthday 10/30/1968

Profile Information

  • Gender
    Male
  • Location
    Kassel, Hessen, Deutschland

Recent Profile Visitors

41,787 profile views

malzbie's Achievements

Advanced Member

Advanced Member (3/3)

1.7k

Reputation

  1. 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.
  2. 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.
  3. 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.
  4. 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.
  5. 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.
  6. Du kannst dem Canvas sagen, wie und wo er sich darstellen soll. Du has jetzt Screen Space Overlay aktiviert und musst auf World Space unschalten. Da sind dann noch einige weitere Einstellungen zu machen um die UI Elemente richtig zu positionieren. Aber dazu gibt es zum Glück viele Tutorials im Netz. Such mal bei Tante Google mit den Schlüsselwörtern unity 3d world space canvas
  7. Ja! Das fügt sich besser ein und hat trotzdem kaum an Qualität verloren. Ob es mit den Skys vom Assetstore besser wäre? Weiss ich nicht. Denn dein Spiel, so wie es jetzt aussieht, ist ja "nicht" auf eine kleine Farbpalette ausgelegt. Wenn du da jetzt einen Sky einfügst, der nur wenige Farbabstufungen beinhaltet, würde sich das wahrscheinlich mit dem Rest beißen...vielleicht aber auch nicht... Andererseits hast du bei den Paralax-Skys, die im Paket mit drin sind, noch mal ein paar Ebenen mehr. Und das könnte wiederum noch mehr Tiefe bringen. Tja, ich bin da wohl keine große Hilfe!
  8. Gut! Aber für ein wenig Kritik ist inzwischen Zeit. Also: Das Spielprinzip ist gut. Da ich schon recht alt bin, kenne ich sowas natürlich schon. Es ist aber ein zeitloses Prinzip, welches auch heute noch Spaß macht. Deine Spielwelt ist echt gut arrangiert und richtig klasse finde ich den Übergang des Hintergrundes. Ich musste mir das Video 2 Mal ansehen um zu erkennen, wie du von dem bewaldeten Bereich wieder zum Himmel kommst, wenn du immer weiter runter gehst. Das ist super gelöst! Die Auswahl der Gegnertypen finde ich ach toll (wobei es mir jetzt nicht um die Grafiken, sondern um die Typen geht). Nett ist auch, dass man nach einem Abschuss immer auch das kleine Figürchen einsammeln muss, weil der Gegner sonst wieder aufersteht. Dass es da diese Portale gibt, die neue Gegner entstehen lassen, ist auch gut. Du hast einen Doppelsprung drin, kannst dich hinlegen, kannst neue Waffen finden und sie dann selber auswählen und außerdem gibt es Heilungskisten. Sehr gute Dinge für so ein Plattformer-Shoot-em-Up. Es gibt aber auch negative Dinge, die du sicherlich selber weißt. Trotzdem will ich mal schreiben, was ich so sehe. Zu allererst fehlt mir natürlich der Sound. Geräusche sind unheimlich Wichtig und können helfen sich zurecht zu finden. Ich weiß, du baust das noch ein. Trotzdem solltest du längst damit angefangen haben. Beispiele: Wenn du von einem Gegner getroffen wirst, dann wird dein Sprite leicht transparent. Ein geeigneter Sound würde dich aber viel besser warnen, denn wenn du im Getümmel auf die Gegner achtest, dann fällt das Transparente nicht so auf. Zum Ende hin warst du auf der Suche nach den letzten Gegnern. Würden die Gegner geräusche von sich geben, dann könntest du sie leichter orten. Gerade wenn du den 3D Sound nutzt. Dann weisst du, dass er rechts oder links von die ist und du weisst, wegen der Lautstärke, wie weit er weg ist. Aktive Portale könnten summen und wenn ein Gegner etsteht, könnte ein Beamsound kommen. Inaktive Portale, wenn der Zähler auf 0 steht, wären dann ohne Sound. Wobei ich persönlich die Portale aus dem Spiel nehmen würde, wenn da nichts mehr kommt. Du hast ja ganz zu Beginn geschrieben, dass du die Grafiken aus dem Assetstore hast. Ist ja nicht schlecht. Aber du solltest evtl. etwas anpassen. Die Pixeldichte sollte auf jeden Fall nah beieinander sein. Wenn du die Grünen Plattformen mit den grauen/silbernen vergleichst, siehst du sofort was ich meine. Entweder sind die Grauen zu grob oder der Kontrast ist zu hoch. Ich kann das nicht genau im Video erkennen. Wenn die Pixel passen, dann solltest du die Grauen etwas weichzeichnen. Die Wolken mit Sonne vom Hintergrund sollte auch pixeliger gestaltet werden und sich somit mit dem Rest verbinden. Die sind mir viel zu realistisch. Deine Gegner sind von Stil her ziemlich unterschiedlich. Manche wirken eher Comic-haft, Wie der Gelbe, das Skelett oder der Geist, und andere wirken erwachsener, wie die lila Fledermaus und die Blobs. Der Drache fällt komplett aus der Rolle. Die Hüpfbewegung macht mich fertig! Also irgendwie ist in deiner 27ten Dimension alles möglich. Und wenn ich jetzt den Jungen dazu ansehe, dessen Sprite als einzigstes eine schwarze Outline hat, dann nimmt das etwas von der Stimmigkeit. Die Sprung-, Fall- und Liegeanimationen des Helden sind auch relativ einfach gehalten. Er könnte etwas mehr Dynamik gebrauchen und er sollte beim Liegen nach vorne gucken. Das ist natürlich Kritik auf hohem niveau, denn es sind nur Kleinigkeiten. Nimm es dir also nicht zu sehr zu Herzen. Aber vielleicht ist ein Blick eines Anderen ja inspirierend. Also: Schön weiter machen!
  9. Wo änderst du denn die JumpForce? Im Script direkt, oder im Inspector? Falls du das im Script tust, wird es keine Änderung geben, denn da die Variable pubic ist, hat sie einmalig den Wert gesetzt und ab dem Moment ist der Wert im Inspector relevant. Nur wenn du dort den Wert änderst, wirst du auch eine Änderung in deiner Force bekommen. Wenn das nicht das Problem ist, dann weiß ich's auch nicht. Mir ist da jetzt kein Fehler im Bezug auf die jumpForce aufgefallen.
  10. Ich habs bei mir getestet und da passiert das nicht. Aber ich nutze andere Physikwerte in meinem Projekt. Es ist so, dass der physikalische Prozess über einen eigenen Takt verfügt. Das ist der Fiexed Timestep, den du unter Project Settings - Time finden kannst. Er ist auf 0.02 voreingestellt, was 50 mal pro Sekunde entspricht. Wenn deine Kugel jetzt nach unten fällt, dann tut sie das nicht fließend, sondern alle 0.02 Sekunden wird errechnet wo sich die Kugel nun befindet und da wird sie dann hin gesetzt. Nicht geschoben! Gesetzt! das bedeutet, dass alles was sich auf dem Weg von jetzt, bis zu nächsten Time Step befindet nicht erkannt wird. Wenn jetzt eine große Kugel mit großem Collider auf eine Plane fällt, die einen ganz feinen Collider in der Höhe hat, dann wird zwar auch jetzt nicht der Punkt, wo sich beide Kollider gerade so berühren, erreicht, die Kugel wird sicherlich etwas in den Collider eingedrungen sein und dann von der Physik ein Stück zurück geschoben werden, aber das lässt sich von der Physik gut berechnen und in die richtige Richtung schieben. Bei deiner kleinen Kugel ist der Collider wahrscheinlich viel weiter eingedrungen. Z.B. bis knapp zur Hälfte. Jetzt bekommt die Physik ein Problem, denn welche Seite der Kugel hat jetzt den Kontakt verursacht? Die Physik glaubt jetzt möglicherweise, dass es icht nur unten, sondern auch vorne geschehen ist und bouced dann die Kugel in die falsche Richtung. Würdes du die Kugel von weiter oben fallen lassen und sie somit länger beschleunigen lassen, wird es sogar passieren, dass die Kugel durch die Plane durchflutscht. Weil eben noch über der Plane und im nächsten Zyklus schon darunter! Was kannst du machen? - Gib der Plane auf jeden Fall einen dickeren Collider, oder nimm gleich einen Cube. - Ändere auf jeden Fall die Collision Detection des RB's von Discrete auf Continuous oder Continuous Dynamc. ( Kostet etwas mehr Rechenleistung führt aber zu genaueren Ergebnissen) - Verringere die Fixed Timestep z.B. auf 0.01 . Dadurch wird die Physik doppelt so oft berechnet und dadurch genauer. Das kostet natürlich auch doppelt so viel Rechenleistung. Ist aber auch kein Problem, wenn nur wenige RB's im Spiel sind. Ich baue virtuelle Flipper und bei mir ist die Fixed Time auf 0.007 eigestellt. Ich habe außerdem vor Jahren schon bemerkt, dass große physikalische Objekte viel weniger Probleme bereiten als kleine Objekte. Aus diesem Grund sind meine Flipper 10 mal größer als ein Original. Eine Kugel, die normalerweise nur 2.7 cm groß ist, ist jetzt 27cm groß. Weil durch die Größe die Physik aber anders wirkt ( also optisch), habe ich die Schwerkraft erhöht. Nicht ganz um den Faktor 10, aber trotzdem so weit, bis der Kugelfall realistisch aussieht. Sowas kannst du also auch mal probieren. Alles einfach etwas gößer bauen. Ich denke, jetzt bekommst du die Physik in den Griff.
×
×
  • Create New...