Wie zu kollidieren Objekte mit hoher Geschwindigkeit in der Einheit
Ich versuche, zu schaffen-Spiel für Android und ich habe ein problem mit high-speed-Objekte, die Sie nicht wollen, zu kollidieren.
Habe ich eine Kugel mit Sphere Collider und Federnd material und Festkörper, die mit diesem param (Schwerkraft=false, Interpolieren=Interpolieren, Collision Detection = Kontinuierliche Dynamische)
Auch ich habe 3 Wände mit Box Collider und Federnd material.
Dies ist mein code für die Sphäre
function IncreaseBallVelocity() {
rigidbody.velocity *= 1.05;
}
function Awake () {
rigidbody.AddForce(4, 4, 0, ForceMode.Impulse);
InvokeRepeating("IncreaseBallVelocity", 2, 2);
}
In den Projekt-Einstellungen habe ich eingestellt: "Min Penetration Strafe Für Force"=0.001, "Solver-Interation-Count"=50
Wenn ich auf den start-Sie funktionieren (es springt), aber wenn die Geschwindigkeit gehen zu hoch, Kugel, passt einfach die Wand.
Kann mir jemand helfen?
Dank.
Bearbeitet
var hit : RaycastHit;
var mainGameScript : MainGame;
var particles_splash : GameObject;
function Awake () {
rigidbody.AddForce(4, 4, 0, ForceMode.Impulse);
InvokeRepeating("IncreaseBallVelocity", 2, 2);
}
function Update() {
if (rigidbody.SweepTest(transform.forward, hit, 0.5))
Debug.Log(hit.distance + "mts distance to obstacle");
if(transform.position.y < -3) {
mainGameScript.GameOver();
//Application.LoadLevel("Menu");
}
}
function IncreaseBallVelocity() {
rigidbody.velocity *= 1.05;
}
function OnCollisionEnter(collision : Collision) {
Instantiate(particles_splash, transform.position, transform.rotation);
}
BEARBEITET, Hinzugefügt mehr info
- Festen Zeitschritt = 0.02 Maximal Zulässige Tir = 0.333
- Es gibt keinen Unterschied zwischen dem ausführen der Spiels im editor Spieler und auf Android
- Nicht. Es sieht OK, wenn ich 0.01
- Meinem Paddel-Box-Collider, ohne Festkörper, Wände sind die gleichen
- Es sind alle in derselben Ebene (bei der Geschwindigkeit ist normal, es funktioniert alles) Wert in PhysicsManager sind die Standard (die gleiche wie im Bild) - ausser "Solver Interation Co..." = 50
- Nicht. Wenn ich die Geschwindigkeit ändert es vorbei an anderen Wand
- Ich bin mit standard-cube, aber ich erweitern/verkleinern es passt meinem Bildschirm und anderen Gegenständen, wenn ich erweitern Wand mehr, dann ist es OK springende
- Nicht. Es ist eine einfache Projekt, einfaches Beispiel von Video - http://www.youtube.com/watch?v=edfd1HJmKPY
- Ich glaube nicht, verwenden Sie die Schwerkraft
InformationsquelleAutor Kec | 2013-01-14
Du musst angemeldet sein, um einen Kommentar abzugeben.
Finden Sie unter:
Könnte man auch versuchen Sie, die Feste Zeit, Schritt für Physik. Je kleiner der Wert, desto mehr Zeit Einheit berechnet die Physik einer Szene. Aber seien Sie gewarnt, so dass dieser Wert zu klein, sagen <= 0.005, führt wahrscheinlich zu einem instabilen Spiel, besonders auf einem tragbaren Gerät.
Das script oben ist am besten für Kugeln oder kleine Objekte. Sie können manuell erzwingen rigid body collisions tests:
Nein, solange deine Kugel hat eine Festkörper-Komponente. Das Skript eignet sich jedoch nur für sehr grobe tests, und es verwendet, was wahrscheinlich der Mittelpunkt Ihres Objekts für die Prüfung. Aber da haben Sie eine Kugel, die Sie könnte leicht ray geworfen, der den nächsten Treffer, und wenn das getroffen ist < der radius der Kugel, stoppen der Kugel.
Ich versuche verschiedene Dinge, aber es funktioniert nicht. Nun habe ich diesen code, so können Sie mir sagen, was zu ändern. Ich code hinzufügen, in Frage zu stellen. Danke für die Hilfe.
InformationsquelleAutor Jerdak
Ich denke, das Hauptproblem ist die manipulation von
Rigidbody
'svelocity
. Ich würde Folgendes versuchen um das problem zu lösen.IncreaseBallVelocity
und jede andere manipulation derRigidbody
aufgerufen wirdFixedUpdate
. Überprüfen Sie, dass es keine anderen Manipulationen zuTransform.position
.AddForce
oder ähnliche Methoden, so der Physik-engine, eine höhere chance hat, um alle Abhängigkeiten zu berechnen.Weiterer Punkt, auf den ich zufällig entdeckt habe waren die Maschen, die skaliert sehr viel. Mit einem
GameObject
mit Skala <= 0,01 oder >= 100 hat definitiv einen negativen Einfluss auf die Physik Berechnung. Nach der docs und diese Einheit forum Eintrag von einem von den gurus, die Sie vermeiden sollten zu Verwandeln.Skala Werte != 1Immer noch nicht glücklich? OK, dann der nächste test ab mit hohen Geschwindigkeiten, aber keine Beschleunigung. In dieser phase wollen wir wissen, ob die hohe Geschwindigkeit oder die Beschleunigung ist die Schuld für das problem. Es wäre interessant zu wissen, die Geschwindigkeiten' Werte, auf welche die Physik-engine beginnt zu scheitern - bitte posten, damit wir vergleichen können.
EDIT: Einige weitere Dinge, die zu untersuchen
6.7 m/sec hört sich nicht so viel, so dass ich denke, es gibt einen besonderen Grund oder eine Kombination von Gründen, warum die Dinge schief gehen.
Fixed Timestep
. Beachten Sie, dass dieses töten könnte die Framerate aber das kann dfixed später.0.01
FixedTimestep
? Dies würde bedeuten, dass die Physik-engine könnte in Schwierigkeiten sein.Rigidbody
), die verschoben oder manipuliert ist? Dies würde dazu führen, schwere Neuberechnungen innerhalb von PhysX.transform.scale
ist nicht Schuld (ich habe sehr schlechte Erfahrung mit diesem).TimeManager.timeScale
von einem Skript?Ich setzen Sie scale-Parameter, der den ball in der Anfang, wenn ich erstellen, ball und alle. Aber ich bin mehr daran interessiert, dass es Anrufe OnCollisionEnter aber es ist kein Prellen, wie etwas ist nicht richtig mit "Federnd" - material.
Gut
Bounciness = 1
undBounce Combine = Max
tun sollte. Über die Skalierung: Nach dem docs und der forum-Eintrag von einem der gurus Sie sollten es vermeiden, zu Verwandeln.Skala Werte != 1.Parameter Bounciness = 1 und Bounce Kombinieren = Max sind bereits gesetzt. Und über die Skalierung I set Kugel 1, 1, 1 aber die anderen Objekte, die ich hatte, zu skalieren, da die Symmetrie, in diesem Fall musste ich erhöhen die Ballgeschwindigkeit und dann ist es wieder passiert (ball pass der Wand)? Jede andere Idee? Danke für die Hilfe.
Schwieriges problem, aber interessant. Ich aktualisiert meine Antwort mit etwas mehr Anregungen und twitterte es - mal sehen.
InformationsquelleAutor Kay