2017-07-24 4 views
-1

Ich habe alles versucht. Der Spieler fällt durch, egal welche Art von GameObject (Würfel usw.) ich darunter platziere. Es hat einen Kreis Collier und einen starren Körper.Spieler fällt durch den Boden

Wie kann ich das Objekt fallen durch den Boden

stoppen Ich sollte erwähnen, dass der Spieler soll sterben, sobald sie in Kontakt mit irgendetwas kommt, damit ich weiß nicht, wie dies zu nähern.

+1

Ein Collider .... Da es ein 2D-Objekt ist, haben Sie den 2D-Collider sowohl an das Objekt als auch an den Boden angeschlossen? – Programmer

+0

Ja, ich habe den 2D Collider auf dem Boden befestigt. dennoch gelingt es, durch – ROOT

+0

nicht nur auf den Boden sondern auch auf das andere Objekt zu fallen. Außerdem muss isTrigger auf beiden deaktiviert sein. Wenn dies der Fall ist, poste einen Screenshot von beiden GameObjects Inspector. – Programmer

Antwort

0

Der Trigger muss für die Objekte, durch die der Player geleitet werden soll, wahr sein. Player isTrigger sollte immer falsch sein.

Der Player muss mit einem rigidbody2D verbunden werden.

Debuggen Sie Ihren Code, überprüfen Sie für getriggerte Collider OnTriggerEnter2d und für nicht getriggerte Collider OnCollisionEnter2D zur Überprüfung.

3

Wenn Objekt durch den Boden fällt, hier sind die Dinge zu überprüfen.

. Ist Collider an das Objekt angehängt? Wenn nicht, dann verbinden Sie Collider oder Collider2D mit diesem Objekt.

. Ist isTrigger auf einem Objekt Collider aktiviert? Wenn ja, dann deaktivieren Sie IsTrigger auf beiden Collidern.

. Wenn Rigidbody an das GameObject angeschlossen ist, stellen Sie sicher, dass sich der Player 100% über dem Boden befindet, bevor Sie auf "Play" klicken oder weitere Probleme auftreten.

. Die Größe des GameObjects ist möglicherweise klein. Wirklich klein. Es gibt eine Grenze für die Größe des Objekts, bevor es mit einem anderen Objekt kollidieren kann. Versuchen Sie, die Größe des Objekts zu ändern und dann die Kamera zurück zu bewegen.

Wenn ich isTrigger für meine Spieler zu deaktivieren, dann wird es nicht möglich sein, durch die anderen Objekte zu gehen, die ich es brauche, um durch zu gehen.

Dies ist überhaupt kein Problem. Sie können Layer verwenden, um Unity festzulegen, welche Collider mit anderen kollidieren können. Nur deaktivieren Sie die isTrigger dann verwenden:

Für 2D:

Physics2D.IgnoreCollision(yourFirstCollider, yourOtherCollider, true); 

oder

Physics2D.IgnoreLayerCollision(yourLayer, yourOtherLayer, true) 

Für 3D-:

Physics.IgnoreCollision(yourFirstCollider, yourOtherCollider, true) 

oder

Physics.IgnoreLayerCollision(yourLayer, yourOtherLayer, true); 

Dadurch wird der Spieler nicht durch den Boden gehen, sondern durch andere Objekte, die Sie wollen. Dies können Sie auch über die Editor-Einstellungen tun.bearbeiten ->Projekteinstellungen ->Physik -> oder bearbeiten ->Projekteinstellungen ->Physik 2D

der Spieler einmal sterben soll, es mit etwas in Kontakt kommt, so weiß ich nicht, wie diese dieses

Ansatz ist nicht mit dem Problem, aber OnCollisionEnter2D wird verwendet, um Kollision zu erkennen. Sie können Destroy auf dem Player anrufen.

void OnCollisionEnter2D(Collision2D collision) 
{ 
    Destroy(player); 
} 

EDIT:

Wenn Sie auch erkennen, müssen, wenn der Spieler andere Beschleunigern berührt, aber nicht wollen sie eigentlich Collider, dann können Sie das tun, was ich oben und dann beschrieben hinzufügen Kind Objekte mit Collders zum Spieler. Diese untergeordneten Objekte haben isTriggeraktiviert. Sie können dann die OnTriggerEnter Funktion verwenden, um zu erkennen, wenn eine Kollision zwischen den Objekten, die kein Stockwerk sind, stattfindet.

+0

Ich bin eine Art Noob mit Unity ATM, wahrscheinlich eine Art dumme Frage, aber füge ich diesen Code in das Player-Skript ein? 'Physics2D.IgnoreCollision (yourFirstCollider, yourOtherCollider, true);' – ROOT

+0

Überprüfen Sie die [doc] (https://docs.unity3d.com/ScriptReference/Physics2D.IgnoreCollision.html) für ein vollständiges Beispiel. Sie müssen den Collider2D an die Funktion übergeben. Ich empfehle Ihnen übrigens, stattdessen 'Physics2D.IgnoreLayerCollision' zu verwenden, dem Sie nur die Layernummer übergeben müssen. 'Physics2D.IgnoreLayerCollision (3,5, true)' was bedeutet, keine Kollision zwischen Ebene 3 und Ebene 5. Google "Wie erstellt man Ebenen in Unity" für weitere Informationen. – Programmer