Consider this a side view, like in a 2D platformer. In the diagram, the light blue line is the slope of the surface the player is standing on (so it’s about 45 degrees). The green arrow is the surface normal of the slope. The dark blue arrow is the player’s movement vector walking into the slope, and the red arrow is the resulting vector when the blue vector is projected onto the green vector. (so basically, the red arrow is the final vector that the player will move at on the slope). When he’s walking up the slope, all is well and he moves at the appropriate speed, but when he’s walking DOWN the slope, he continues to move at the slow speed.
` //get the vector that the player is supposed to be moving in. Vector3 movement_vec = new Vector3(0.4f,0,0); //player moves to the right //project player movement onto the surface he's on Vector3 adjusted_movement_vec = Vector3.ProjectOnPlane (movement_vec,hitinfo.normal); //now move the player posvec = transform.position; posvec += adjusted_movement_vec; transform.position = posvec; ` I do understand mathematically that this is how it's supposed to be, since the vector we're projecting (blue) onto the surface in both cases (uphill and downhill) is the same magnitude, just pointing in the opposite direction, but I'm trying to determine how one would go about making it so that the player would move faster when walking downhill (whether that be a different approach altogether in Unity, or some other mathematical approach). Thanks! :)