Hallo Christian__A,
versuche doch das ganze einmal mit dem z-Parameter der Normalen. Ab einem bestimmten
z-Wert der Normalen tritt die Drift nach unten in Kraft in Stärke der x- und y-Parameter der
Normalen.
Ich habe einmal ein kleines Skript aufgesetzt. Ich hoffe es ist einigermaßen verständlich.
Code:
VECTOR vec_Von;
VECTOR vec_Nach;
VECTOR my_Bodenneigung;
VECTOR player_abs_force; // Absolute Geschwindigkeit
VECTOR player_abs_speed; //Absolute Bewegung
VECTOR player_rel_speed; // Relative Bewegung
var gravity = 0.7; // Allgemeine Gravitation
function Scanne_Boden()
{
vec_set(my_Bodenneigung,nullvector);
vec_set(vec_Von,MY.x);
vec_set(vec_Nach,MY.x);
vec_Nach.z -= 500;
c_trace(vec_Von, vec_Nach, IGNORE_ME|IGNORE_PASSENTS|IGNORE_PASSABLE|IGNORE_SPRITES|USE_BOX);
my_Bodenneigung.X = NORMAL.X; // Bestimmung der Normale unter dem Player
my_Bodenneigung.Y = NORMAL.Y; // Bestimmung der Normale unter dem Player
my_Bodenneigung.Z = NORMAL.Z; // Bestimmung der Normale unter dem Player
if(my_Bodenneigung.Z < 0.9) // Ab welchem Neigungswinkel die Drift in Kraft tritt
{
player_abs_force.X = my_Bodenneigung.x * gravity * 10; // Wert "10" erhöht oder verringert die Drift nach unten
player_abs_force.Y = my_Bodenneigung.y * gravity * 10; // Wert "10" erhöht oder verringert die Drift nach unten
player_abs_speed.x = player_abs_force.X * time_step; // Absolute Bewegung des Players
player_abs_speed.y = player_abs_force.Y * time_step; // Absolute Bewegung des Players
}
c_move(me,player_rel_speed,player_abs_speed,IGNORE_ME|IGNORE_PASSENTS|IGNORE_PASSABLE|GLIDE);
}
Müßte so in dieser Art funktionieren.
Vielleicht hast Du ja soetwas gesucht.