2D movement with gravity shifting
I want to make a 2D action-platformer that utilizes gravity shifting as its main game mechanic; the idea is to be able to make any of the cardinal directions "down" and have the player be able to move like a normal platformer relative to the current gravity direction. I already have the gravity shifting down, but I keep running into issues with the player movement and camera. For north and south, the movement works perfectly fine but the camera isn't turning smoothly like the player when shifting gravity; and for east and west, the player moves in the right directions but rotates along the global y-axis instead of its local y-axis, and the camera stays upright instead of rotating.
I'm sure that the mistake(s) I'm making is/are small and easily fixed, but I keep coming up with 'solutions' that just cause other problems
 float lLx = Input.GetAxis("LStickX");
         float lLy = Input.GetAxis("LStickY");
 
         if (lLx != 0)
         {
             if (lLx < 0)
             {
                 mTargetTurnAngle = 90f;
             }
             else
             {
                 mTargetTurnAngle = -90f;
             }
             transform.position += mMovementVector * (lLx * mMovementSpeed);
             //mRb.AddForce(transform.right * (lLx * mMovementSpeed), ForceMode.Force);
             transform.position = new Vector3(transform.position.x, transform.position.y, 0);
         }
 
         switch ((int)mCurGravity)
         {
             case 0: //South (normal gravity)
                 mGravNormal = Vector3.down;
                 mMovementVector = Vector3.right;
                 mTargetShiftAngle = 0f;
                 break;
             case 1: //West
                 mGravNormal = Vector3.left;
                 mMovementVector = Vector3.down;
                 mTargetShiftAngle = -90f;
                 break;
             case 2: //North
                 mGravNormal = Vector3.up;
                 mMovementVector = Vector3.left;
                 mTargetShiftAngle = 180f;
                 break;
             case 3: //East
                 mGravNormal = Vector3.right;
                 mMovementVector = Vector3.up;
                 mTargetShiftAngle = 90f;
                 break;
             default:
                 break;
         }
         mRb.AddForce(mGravityFactor * mRb.mass * mGravNormal);
 
         if (mTargetShiftAngle != transform.rotation.eulerAngles.z || transform.rotation.eulerAngles.y != mTargetTurnAngle)
         {
             mTargetRotation = Quaternion.Euler(mTargetShiftAngle, mTargetTurnAngle, 0);
             transform.rotation = Quaternion.RotateTowards(transform.rotation, mTargetRotation, mShiftRotatationSpeed);
             Vector3 temp = transform.rotation.eulerAngles;
             mCamera.transform.rotation = Quaternion.Euler(0, 0, temp.z);
             //mCamera.transform.rotation = Quaternion.Euler(0, 0, temp.x);
         }
         mCamera.transform.position = new Vector3(transform.position.x, transform.position.y, -10);
 .
 .
 .
 if (Input.GetButtonDown("AButton"))
         {
             if (IsGrounded())
             {
                 //mRb.AddForce(mJumpforce * transform.up, ForceMode.Impulse); //original
                 mRb.AddForce(mJumpforce * (-mGravNormal), ForceMode.Impulse);
             }
         }
How can I get my player and camera to behave like a normal 2D platformer with any gravity?
Your answer
 
 
              koobas.hobune.stream
koobas.hobune.stream 
                       
                
                       
			     
			 
                