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.