Wie man ein Fan-ähnliches Verhalten erzeugt

7

Ich mache ein Spiel in Unity. Ich habe ein Objekt zB Würfel. Ich möchte Luft wie ein Ventilator ablassen, damit andere Würfel sie wegwerfen, wenn sie näher kommen. Welche Geschwindigkeit, Kraft usw. brauche ich dafür?

Zeeshan Mirza
quelle
Die Lösung hierfür könnte im folgenden Link sein. answers.unity3d.com/questions/31872/…
Mikolaj Marcisz

Antworten:

10

Während die aerodynamischen Effekte, die durch einen Lüfter verursacht werden, sehr komplex sein können, um genau zu modellieren, reicht es in den meisten Fällen aus, die Kraft zu modellieren, die er nach dem Inverse-Square-Gesetz anwendet .

Dies bedeutet, dass die Kraft, die es auf ein anderes Objekt ausübt, durch die mit sich selbst multiplizierte Entfernung geteilt wird.

Ein weiterer Faktor, den Sie modellieren können oder nicht, je nachdem, wie physisch korrekt Sie sein möchten, ist der Windwiderstand der Objekte, die vom Lüfter gedrückt werden. Windwiderstand bedeutet, dass Objekte mit einer großen Oberfläche, die der Windrichtung ausgesetzt ist, mehr Kraft vom Wind erhalten als Objekte mit einer kleineren Oberfläche (wiederum zu stark vereinfacht. Die Aerodynamik ist in der Realität viel komplexer). Wenn Sie dies modellieren möchten, müssen Sie auch die Kraft mit der Oberfläche des Objekts multiplizieren, das gedrückt wird.

Die vollständige Formel wäre dann:

appliedForce = fanForce / (distance * distance) * surfaceArea

Diese Formel weist jedoch eine Gefahr auf: Sie hat eine Singularität, wenn der Abstand 0 beträgt. Wenn der Abstand unter 1 liegt, ist die Kraft größer als das beabsichtigte Maximum. Wenn der Abstand sehr klein wird, kann die Kraft extrem stark werden. Dies könnte zu ziemlich störendem Verhalten führen. Um dieses Problem zu beheben, fügen Sie Ihrer Entfernungsberechnung 1 hinzu oder begrenzen Sie die Entfernung auf 1:

appliedForce = fanForce / (1.0 + distance * distance) * surfaceArea

oder

if (distance < 1.0) distance = 1.0;
appliedForce = fanForce / (1 + distance * distance) * surfaceArea;    

Genauere Ergebnisse könnten durch eine tatsächliche physikalische Simulation der Aerodynamik erzielt werden. Dies ist jedoch ein hochkomplexes Gebiet, sowohl hinsichtlich der Entwicklungszeit als auch der Rechenressourcen. Wenn die physikalisch genaue Aerodynamik nicht ein zentrales Gameplay-Element Ihres Spiels ist, ist es unwahrscheinlich, dass sich der Aufwand lohnt.

Philipp
quelle
Ich verstehe nicht, warum Sie durch die Oberfläche teilen würden, sollten Sie nicht damit multiplizieren?
Joren
@Joren Ich multipliziere mit der Oberfläche. In den meisten Programmiersprachen gibt es keinen Operator-Vorrang zwischen Division und Multiplikation, daher werden sie in der Reihenfolge ausgeführt, in der sie geschrieben sind.
Philipp
1

Sie können einfach den Abstand berechnen (Sie können ein beliebiges Netz für das Abschneiden von Kollisionen verwenden, um die "Luftstrom" -Grenzen darzustellen). Je näher es kommt, desto höher ist die Kraft, die Sie in dieser Richtung auf es ausüben. Natürlich ist dies nicht so genau, aber Sie können der Richtung der Geschwindigkeit Rauschen hinzufügen.

Sidar
quelle