Jump to content
Unity Insider Forum

malzbie

Moderators
  • Content count

    4,662
  • Joined

  • Last visited

  • Days Won

    284

malzbie last won the day on June 8

malzbie had the most liked content!

Community Reputation

1,427 Excellent

1 Follower

About malzbie

  • Rank
    Moderator
  • Birthday 10/30/1968

Profile Information

  • Gender
    Male
  • Location
    Kassel, Hessen, Deutschland

Recent Profile Visitors

15,503 profile views
  1. Das machst du im TimeManager: https://docs.unity3d.com/Manual/class-TimeManager.html
  2. Ja, das ist leider ein Feature. Im Endeffekt liegt das daran, dass die Kante des neuen Colliders fehlinterpretiert wird, wenn deine Kugel sich recht schnell bewegt. Es wirkt ja immer die Schwerkraft, die deine Kugel nach unten zieht. Scheinbar wird die Collision erst danach ausgewertet. Das führt dazu, dass in jedem FixedUpdate Zyklus (die Physik ist ja auf diesen Zyklus synchronisiert) die Kugel etwas nach unten gegangen ist und somit etwas im Collider steckt. Die Physikerkennt das und schiebt die Kugel wieder aus dem Collider raus. Wenn das Bild gerendert wird, sieht dann alles gut aus. Wenn jetzt aber die Berechnung genau beim Übergang der 2 Collider erfolgt, meint die Physik, dass die Kugel gegen eine Kante gekommen ist und führt dann dieses Abprallen aus. Du hast einige Möglichkeiten um das zu umgenen. -Bau dir einen Collider der über diese Kanten hinweg geht. -Stell den CollisionMode de RB auf ContinousDynamic um. -Erhöhe die Taktrate der Physik, also verringer die FixedTimesteps.
  3. malzbie

    Malzbie's Pinball Collection

    Es ist mal wieder Summer-Sale auf Steam und ich mache dieses Mal auch mit! Alle Flipper für den halben Preis! Also wer sie noch nicht alle hat, sollte zuschlagen. https://store.steampowered.com/app/729580/Malzbies_Pinball_Collection/
  4. malzbie

    Rigidbody.AddForce() funktioniert nicht

    Da wo du die Granate instanzierst ist auch kein Collider? Wenn du nämlich innerhalb eines anderen Colliders instanzierst, greift sofort die Physik und wird die Granate aus dem Collider drängen. Das kann schon heftig sein. Ich empfehle dir einfach mal in einer leeren Szene die Granate irgendwo zu instanzieren und ihr die Force zu geben. Dafür machste dir ein ganz einfaches Script, wo du eine Taste abfragst und ein fach an der Position 0,0,0 die Granate instanzierst. Du erst Mal lernen wie sich die Werte auswirken. Eine Masse von 10 bedeutet übrigens dass deine Granate 10kg schwer ist! Denk daran, dass uniy das metrische System nutzt. Eine Masse von 1 ist 1kg. Eine Größe oder Länge von 1 ist exakt ein Meter.
  5. malzbie

    Rigidbody.AddForce() funktioniert nicht

    Du hast in der vorletzten Zeile den RB auf Kinematic gestellt. Wenn du das machst, dann ist er mit AddForce und Velocity nicht mehr bewegbar. Warum stellst du den denn auf Kinematic?
  6. malzbie

    Charakter rutscht

    Du hast nicht verstanden, was das Positionsändern über die Transformkomponente denn eigentlich macht. Kurze einfache Erklärung: Bei Frame 1 ist der Charakter bei x=1. Bei Frame 2 ist der Charakter bei x=1.2. Einfach so, ohne Zwischenwert und ohne auf irgendwelche physikalische Besonderheiten zu achten. Denn du nutzt ja nichts physikalisches sondern nimmst ihn bei 1 weg und setzt ihn bei 1.2 hin. Puff - Pop! Wie beim Beamen! Du hebelst also alles was mit Physik zu tun hat aus. Bewegst du physikalisch, dann gibst du dem Körper eine Geschwindigkeit oder übst eine Kraft auf ihn aus. Er hat jetzt also eine kinetische Energie, die ihn bewegt. Diese Energie kann über Dragwerte oder Reibungen abgebaut werden. Natürlich ist der Körper bei Frame 1 auch bei x=1 und bei Frame 2 bei x=1.2. Aber das was dazwischen gewesen wäre wurde jetzt physikalisch berechnet und kann Einfluß auf die weitere Geschwindigkeit oder Drehung haben. Ein Physikalisches Material wirkt sich aber nur dann aus, wenn der Körper mit einen anderen Körper in Berührung ist. Wenn etwas fällt, berührt es nichts und dann wirkt auch nichts. Lediglich der Drag-Wert wirkt immer bei einem RB. Egal ob der fällt fliegt, rollt oder rutscht. Aber natürlich nicht, wenn du ihn über die Transformkomponente irgendwo hin setzt, sondern nur, wenn er sich über die Physik bewegt. Hatte ein RB noch eine gewisse Velocity und du setzt ihn über Transform irgendwo hin, wird er sich nach dem Setzen in gleicher Geschwindigkeit weiterbewegen, wie beim Frame davor. Denn du hast an der Physik nichts geändert. Klingelts?
  7. malzbie

    Probleme mit Rotation

    Ja stimmt. Ich habe das verwechselt. Das Problem, was ich gemeldet hatte, war, dass die Objekte sich nicht wieder zurück skalierten, sobald man sie wieder vom Vater entfernt hatte.
  8. malzbie

    Charakter rutscht

    Der Dragwert ist ein Simulierter Widerstand. Den gibt es einmal für seine Bewegung (Luftwiderstand) und einmal für seine Rotation. Wenn du den auf 0 stellst, dann hast du keinen Widerstand (Weltraum). Stellst du den auf 1000 dann ist er irre hoch! Trotzdem kannst du natürlich den RB über forces in Bewegung oder Rotation bringen, er wird aber je nach Dragwert schneller oder weniger schnell abbremsen. Bei 0 würde er sich ewig weiterbewegen oder weiterdrehen, wenn er nicht mit irgendetwas kollidiert oder sich an etwas reibt. Bei einem sehr hohen Wert, würde er sofort stark abbremsen und man müsste viel Kraft aufwenden um ihn schnell zu bewegen. Physikalische Materialien werden zu dem Drag dazu addiert, wenn der Körper über eine Fläche rollt oder rutscht. Jeder Collider hat ein physikalisches Material. Selbst wenn im Slot nichts drin ist, werden irgendwelche Werte genommen. Wie die Materialreibungen einberechnet werden, kannst du einstellen. Einmal stellst du natürlich ein, ob der Körper viel oder wenig Reibung hat, und dann stellst du zusätzlich noch ein, wie die Werte genutzt werden, also wie 2 oder mehr Körper sich gegenseitig beeinflussen sollen. Da kannst du sagen, dass der Mittelwert der Reibung, eine Multiplikation von beiden, der kleinste Reibungswert oder der größte Reibungswert der Körper genutzt werden soll. Wenn z.B. ein Gummiklotz mit hoher Reibung auf einer Eisfläche rutschen soll, würde man wahrscheinlich einstellen, dass der minimale Reibungswert genommen werden soll. Soll ein Körper mit vielen Untergründen interagieren, wäre der Durchschnittswert wahrscheinlich die bessere Wahl. Ob du nun bei deinem Spiel die Reibung eines Materials hoch stellst, den Dragwert hoch stellst, beim Auftreffen nach einem Sprung, einfach die Velocity des RB auf 0 stellst oder aber den RB in seinen Bewegungsachsen einfrierst, bleibt dir überlassen.
  9. malzbie

    Charakter rutscht

    Du nutzt scheinbar einen Rigidbody, bewegst für den Sprung aber mit Transform. Machst du alle Bewegung über trasform, oder bewegst du auch über forces oder die Velocity? Frier doch mal die X und Z Positionen vom RB bei den Constraints ein, wenn du nur über die Transformkomponente bewegst. Oder aber erhöhe den Dragwert vom RB. Die Kapsel reibt nun mal vel weniger als die Box. Und auch wenn du kein physical Material nuztz, werden da irgendwelche Standardwerte für die Berechnung genutzt.
  10. malzbie

    Probleme mit Rotation

    Willkommen DocHoff! BMP als Bildformat zu nutzen ist nicht so gut. Erstens zeigt das Forum die Vorschau nicht an und zweitens sind das ja unkomprimierte Bilder, die recht groß werden können. Zum Problem: Das ist ein UnityBug! Ich hatte diesen Fehler schon in der Version 5 gemeldet und man versprach mir Besserung in der nächsten Version. Ist scheinbar immer noch da, oder nutzt du die Version 5? Dieser Fehler passiert nur, wenn du Unity Grundoblekte verschachtelst und die dann manipulieren willst. Wenn du 3D Objekte importierst und die dann nutzt, sollte die Verformung nicht passieren.
  11. malzbie

    Lonely World

    Hey! Hab schon gedacht, dass du keine Lust mehr aufs Spiel hast. Schön, dass es weiter geht.
  12. Also wenn du physikalische Befehle nutzen willst, dann mache es immer in der FixedUpdate. Nie in der Update! Setze also eine Variable in der Update auf true und in der FixedUpdate fragst du die ab und machst dann da deinen Boost. Reibungen, Drag-Werte und Schwerkraft werden immer nur in der Fixed berücksichtigt und berechnet. Somit kann es durchaus sein, dass der Boost in der Update auf deinem Rechner (60fps) und auf nem Handy (30fps) wegen der deltaTime unterschiedlich viel Power bekommt, die aber erst eine gewisse Zeit später berücksichtigt werden. Kann ja auch sein, dass dein Fixed Timestep für ein Handy zu gering ist und gar nicht eingehalten werden kann.
  13. malzbie

    on trigger stay pendant (gelöst)

    Na ja. Da ist natürlich eine Abfrage mehr drin, aber das macht so gut wie kein Rechenaufwand. Vielmehr ist die Unterscheidung nicht schlecht, wenn es mehrere triggerbare Objekte gibt und du je nach Objekt etwas anderes machen willst. Übrigens funktioniert ein Triggerevent immer in beide Richtungen. Also in deinem Fall beim Player und bei der Wand. Wenn du also in eine Wand eindringen solltest, diese aber zerstört wird, wird möglicherweise kein Exit mehr kommen weil der Collider der Wand einfach nicht mehr in der Szene ist. Du kannst die Wand aber etwas tun lassen, bevor sie sich vernichtet und mit deinem Player bzw. der Waffe vorher OnTriggerEnter ausgeführt hatte. Die Wand hatte das Event ja auch mitgekriegt und könnte für diesen Fall beim zerstören über OnDestroy() eine Info an die Waffe senden. Klar, die Wand braucht dann ein Script.
  14. malzbie

    on trigger stay pendant (gelöst)

    unsigned hat schon eine gute Lösung parat. Man sollte aber evtl. noch eine Unterscheidung für den Trigger rein tun. Es wird ja bestimmt nicht nur gegen die Wand getriggert. Deswegen den Wänden noch den Tag "Wand" geben und in den Trigger so abfragen: void OnTriggerEnter(Collider other){ if(other.CompareTag("Wand"){ inWand=true; } } void OnTriggerExit(Collider other){ if(other.CompareTag("Wand"){ inWand=false; } } Kurze Erklärung zum Grundproblem: Getriggert wird immer, da wird nichts verschluckt. Aber der Moment ist halt wirklich kurz. Und wenn der FixedTimestep schneller ist, als deine Framerate ( und das sollte in der Regel immer so sein) dann kann es zwischen 2 Frames zu mehreren Physik Updates kommen und deswegen auch mehrmals die OnTrigger Abfrage kommen. Und wenn man diesen Moment nicht in eine Variable zwischenspeichert oder sie innerhalb jedes Triggerevents vorher auf false setzt, passiert folgendes: Letztes Update: Die Waffe ist nicht im Trigger. Physics Update: Die Waffe ist in den Trigger eingetaucht und wird auch mit OnTriggerEnter registriert. Jetzt kommt ein weiteres Physical Update, weil die Framerate geringer ist als die Wiederholungsrate für die Physik. Physics Update: Im letzten Zyklus war die Waffe in der Wand. OnTriggerStay merkt, dass die Waffe immer noch drin ist und somit ist hierfür die Bedingung erfüllt. OnTriggerEnter ist jetzt aber nicht mehr aktiv, denn jetzt gerade ist nichts eingetaucht. Erst jetzt kommt das nächste Update. OnTriggerEnter ist schon lange vorbei. Nur OnTriggerStay steht noch an. Etwas später geht deine Waffe aus dem Trigger wieder raus. Physics Update: OnTriggerExit erkennt, dass die Waffe jetzt draußen ist. Ein weiteres physical Update kommt und jetzt ist nichts mehr im Trigger und es geht auch nichts raus, denn das ist ja in der letzten Abfrage passiert. Jetzt kommt das Update und nichts kann ausgewertet werden. Hier noch mal eine Grafik dazu, bei der du erkennen Kannst, dass die physikalischen Dinge mit FixedUpdate synchron laufen und eigentlich ein Loop sind, aus dem immer nur dann rausgesprungen wird, wenn das nächste Frame ansteht. Wenn du also ein Variable nutzt, die nur über Enter und Exit ihren Wert verändert bekommt und nirgendwo anders verändert wird, dann wird alles funktionieren.
  15. malzbie

    Terrain Lightning

    Schau dir mal an, ob dein Modell auch in Ordnung ist. Also alle Flächen richtig ausgerichtet sind oder ob doppelte Flächen/Punkte da sind. Kurzum: ist das Modell optimal?
×