In diesen Tagen versuche ich, einen 2D-Zeichencontroller mit Einheit zu erstellen (unter Verwendung von Phisics). Ich bin ziemlich neu in Physikmotoren und es ist wirklich schwer, das Kontrollgefühl zu bekommen, das ich suche. Ich würde mich sehr freuen, wenn jemand eine Lösung für ein Problem vorschlagen könnte, das ich finde:
Dies ist momentan mein FixedUpdate:
public void FixedUpdate()
{
Vector3 v=new Vector3(0,-10000*Time.fixedDeltaTime,0);
_body.AddForce(v);
v.y=0;
if(state(MovementState.Left))
{
v.x=-_walkSpeed*Time.fixedDeltaTime+v.x;
if(Mathf.Abs(v.x)>_maxWalkSpeed) v.x=-_maxWalkSpeed;
}
else if(state(MovementState.Right))
{
v.x= _walkSpeed*Time.fixedDeltaTime+v.x;
if(Mathf.Abs(v.x)>_maxWalkSpeed) v.x=_maxWalkSpeed;
}
_body.velocity=v;
Debug.Log("Velocity: "+_body.velocity);
}
Ich versuche hier nur, den starren Körper unter Anwendung einer Schwerkraft und einer linearen Kraft für links und rechts zu bewegen. Ich habe ein physisches Material eingerichtet, das kein Prellen und 0 Reibung beim Bewegen und 1 Reibung bei Stillstand verursacht. Das Hauptproblem ist, dass ich Collider mit Steigungen habe und die Geschwindigkeit sich ändert, wenn ich aufsteige (langsamer), den Hang hinunterfahre (schneller) und auf einem geraden Collider gehe (normal). Wie könnte dies behoben werden? Wie Sie sehen, wende ich für die x-Achse immer die gleiche Geschwindigkeit an.
Für den Spieler habe ich es mit einer Kugel an der Fußposition eingerichtet, die der starre Körper ist, auf den ich Kräfte ausübe.
Jeder andere Tipp, der mir das Leben erleichtern könnte, ist willkommen :).
PD Als ich nach Hause kam, bemerkte ich, dass ich dieses Problem lösen konnte, indem ich eine konstante Kraft parallel zur Oberfläche des Spielers ausübte, aber ich weiß nicht, ob es die beste Methode ist.
quelle
Antworten:
Wenn Sie nach Plattformspielern der alten Schule suchen, besteht der erste Schritt darin, die Physik ganz aufzugeben. Sie werden am Ende gegen das Physiksystem kämpfen, um die entschieden unrealistische Bewegung eines Plattformspielers der alten Schule zu erhalten. Schauen Sie sich diesen CharacterController- Ersatz an, der die Physik insgesamt in den Schatten stellt, um eine gute Vorstellung von einer Möglichkeit zu erhalten, ihn zu implementieren.
quelle
Sie wären wahrscheinlich glücklicher mit dem, was Mheona empfohlen hat. Aber wenn Sie die Physik von Unity verwenden möchten, möchten Sie sie wahrscheinlich verwenden
ForceMode.VelocityChange
.Beispiel:
Sie sollten auch die globale Schwerkraft in den Physikeinstellungen Ihres Projekts anwenden und für Objekte, die schneller fallen sollen, eine Komponente mit konstanter Kraft hinzufügen .
ForceMode.Impulse
ist ähnlich, wird aber von der Masse des Starrkörpers beeinflusst. Erschwert das Einstellen.quelle
Auch wenn Sie die integrierte Character Controller-Komponente nicht mögen (wie ich), sehen Sie sich den Beispielcode der Unity für das 2D-Gameplay-Tutorial an .
Der Code implementiert ein vollständiges 2D-Gameplay mit sich bewegenden Plattformen, Feinden und Boxen mit Kollision unter Verwendung des Character Controllers.
Aber wenn Sie nicht einmal einen Blick darauf werfen möchten, empfehle ich Ihnen, den Einsatz von Physik zu minimieren und zu versuchen, ihr Verhalten mit Ihrem eigenen Code zu kopieren. Je nachdem, welche Art von 2D-Spiel Sie planen, funktioniert es möglicherweise ziemlich gut. Anstatt Kraft anzuwenden
Rigidbody.velocity
, um Ihren Charakter zu bewegen, könnten Sie sich direkt damit anlegenTransform.Translate()
, wodurch das ObjektTransform.position
basierend auf seiner Achse bewegt wird. Sie können dasforward
und inback
Bezug auf das Objekt selbst oder möglicherweise die Plattform oder den Boden bestimmenTransform.up
, sodass Sie wissen, ob es sich um eine Rampe handelt, und den Winkel kennen.Auch wenn Sie eine Art Geschwindigkeitsregelungsatributte erstellen (z. B. wie lange die Taste gedrückt wird), können Sie diese zusammen mit Ihrer Richtung beim Übersetzen anwenden, um zu verhindern, dass Ihr Charakter ohne Geschwindigkeit etwas zu stark geneigt läuft, ähnlich wie bei Sonic the Hedgehog für Genesis / Mega Drive.
Wenn Sie sich dafür entscheiden, weiterhin Physik zu verwenden, kann ich Ihnen überhaupt nicht helfen, weil ich nicht so gut darin bin, aber seien Sie sich bewusst, dass es ein normales Verhalten ist, langsamer einen Hang hinaufzugehen, da der Körper mehr Kraft benötigt, um Schritt zu halten wie im wirklichen Leben.
quelle
Was Sie wollen, ist der eingebaute Character Controller . Durch Festlegen der
step offset
Eigenschaft für diese Komponente können Sie einen Spieler dazu bringen, sich mühelos auf und ab zu bewegen.quelle
Ich nehme an, das liegt daran, dass die Kraft nicht parallel zur Plattform ist und das Ergebnis im Aufstieg niedriger und im Abstieg höher ist.
Wenn Sie eine relative Kraft auf das Koordinatensystem ausüben
Sie möchten eine maximale Geschwindigkeit in "x" beibehalten und mit einem Skalar vergleichen. Denken Sie daran, dass die Geschwindigkeit ein Vektor ist, und setzen Sie vx und vy zusammen. In flachem Gelände ist vy Null, aber notwendigerweise an Hängen größer als Null.
Die Geschwindigkeit ändert sich entsprechend der Richtung des Körpers, und sein relativer vx ändert sich in Bezug auf seinen gesamten vx
Dies kann Ihr V auf eine Weise ändern, die Sie nicht möchten:
Das Beibehalten des gleichen globalen Vx mag dem Auge seltsam erscheinen. (Unerwünschte Beschleunigungen)
quelle