Jump to content
Unity Insider Forum

Kirmes / Ball werfen - Zylinder verzerren sich


Unifier

Recommended Posts

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

post-6156-0-77022200-1478640331_thumb.png

post-6156-0-76600500-1478640338_thumb.png

Link zu diesem Kommentar
Auf anderen Seiten teilen

Kann es sein, dass die Zylinder Kindobjekte von dem Wurfstand sind?

Es gibt nämlich einen Bug in Unity, den ich selber schon gemeldet habe, bei dem sich Grundkörper von Unity verzerren, wenn man sie als Kindobjekte von anderen Grundkörpern hat. Der Bug wird erst mit der V5.5 weg sein und so lange sollte man Grundkörper nicht verschachteln.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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....

Link zu diesem Kommentar
Auf anderen Seiten teilen

Um physikalisch zu kollidieren brauchst du mindestens einen Rigidbody bei den 2 Objekten die kollidieren sollen und beide müssen natürlich einen Collider haben, der nicht auf trigger steht.

Wenn dein Brett keinen RB hat, dann muss die Dose einen RB haben. Es dürfen auch beide einen RB haben. Du musst dann aber beim Brett "is Kinematic" anhaken, damit die Schwerkraft nicht mehr auf das Brett wirkt. Das Brett ist dann komplett unbeweglich.

 

Was deine Aussage mit den 10cm bedeutet weiss ich nicht so recht. Natürlich muss die Physik in der Szene erstmal so richtig in Gang kommen. Wenn sich jetzt beim Szenenstart die Kollider schon durchdringen, dann wird die Physik sie trennen, also die Körper etwas bewegen. Dass kann dann wie eine Erschütterung wirken.

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.

Außerdem solltest du auch mit realen Dimensionen arbeiten. Eine Einheit in Unity ist ein Meter. Und die Masse ist in Kilogramm angegeben. Wenn die Massen und die Größen nicht passen, dann kommt es auch zu unschönen Ergebnissen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

das ganze kann man aber auch einfacher aufziehen.

1) nimm die dosen als ein extra modell. ordne die einzelne dosen einem hauptscript als "gameobject" an.

so das die startposition von jedem gameobjekt lokalisiert wird. die sollten in einer variable oder so übernommen werden.

 

2)wie oben beschrieben, gebe jeder dose einen righbody und mashcolider so das sie beim testen auf einander fallen.

 

3)gebe jeder dose einen script mit dem man easy abfragt ob das objekt getroffen wurde. mittels OnCollisionEnter.

 

4) OnCollisionExit auf dem aufbaupodest anwenden um zu schauen ob auch alle objekte runtergefallen sind und nicht mehr auf dem brett stehen (würd ich mir einfach mit ner variable true'n lassen)

 

5) weitere anwendungen wie variablen erstellen oder strings für objekte mit namen. für gewonnene spiele oder was auch immer.

 

6)checke einfach ob alle würfe verbraucht wurden. und falls ja ob der gewinn ausgezahlt wurde.

 

7)die spiele variablen zurücksetzen (ausgenommen ist der gewinn von dem spieler und die einnahmen der bude)

 

8)lass dir das beendete spiel ebenfalls durch eine variable true'n. dann fragst du diese ab und setzt die positionen deiner lokalendosen zurück so das der turm direkt wieder aufgebaut wurde.

 

das mit dem werfen ist wieder ne andere sache die man zusätzlich dazu einbaut :)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Um physikalisch zu kollidieren brauchst du mindestens einen Rigidbody bei den 2 Objekten die kollidieren sollen und beide müssen natürlich einen Collider haben, der nicht auf trigger steht.

Wenn dein Brett keinen RB hat, dann muss die Dose einen RB haben. Es dürfen auch beide einen RB haben. Du musst dann aber beim Brett "is Kinematic" anhaken, damit die Schwerkraft nicht mehr auf das Brett wirkt. Das Brett ist dann komplett unbeweglich.

 

 

 

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?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dieses Brett-Zylinder-Problem habe ich mal nachgebaut. Die Zylinder fallen auf das Brett (und nicht hindurch) und bleiben darauf liegen. Die Einstellungen sind dabei wie folgt:

Zuerst das Brett. Einfach ein Cube, der passend skaliert wurde. Hier ohne Rigidbody. Der Collider hat IsTrigger = false (Default).

post-6127-0-91145800-1479183159_thumb.jpg

 

Dann die Zylinder. Es sind alles identische Kopien, nur unterschiedliche Positionen. Der Zylinder hat einen Rigidbody, UseGravity ist true, IsKinematic ist false. Der Capsule-Collider hat IsTrigger = false. Das sind alles Default-Einstellungen.

post-6127-0-26436100-1479183199_thumb.jpg

 

Zur Ansicht verwende ich den FPSController. So sieht es aus, wenn man startet.

post-6127-0-39102500-1479183222_thumb.jpg

 

Nachdem die Zylinder auf das Brett gefallen sind, haben sie sich so sortiert.

post-6127-0-27720000-1479183242_thumb.jpg

 

Gibt man dem Brett noch einen Rigidbody mit Default-Einstellungen und startet, landen die Zylinder so:

post-6127-0-65872000-1479183265_thumb.jpg

 

Ich hoffe, das hilft dir weiter :)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Durchdringen sollten sich die Objekte eigentlich nie, wenn alle Objekte Collider haben und auch der Rigidbody im Spiel ist.

Natürlich ist ein Capsule Collider für einen Zylinder echt nicht gut. Da sollte schon ein Mesh Collider da sein, damit die Zylinder auch auf ihren Flächen stehen bleiben.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.?

bearbeitet von Unifier
Link zu diesem Kommentar
Auf anderen Seiten teilen

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung jetzt entfernen

  Only 75 emoji are allowed.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Lädt...
×
×
  • Neu erstellen...