Я использую Unity для создания 2.5D экшн-платформера (3D-графика на 2D-плоскости), который использует гравитационное смещение в качестве основной игровой механики;идея состоит в том, чтобы иметь возможность сделать любое из основных направлений «вниз» и позволить игроку двигаться как обычный платформер относительно текущего направления силы тяжести.У меня уже есть гравитация, смещающаяся вниз, но я продолжаю сталкиваться с проблемами с движением игрока и камерой.В настоящее время движение игрока отлично работает на земле и на потолке («юг» и «север» соответственно), но камера не поворачивается плавно с игроком для «севера»;и игрок вращается вдоль мировой оси Y вместо своей локальной оси Y «восток» или «запад» (также камера не вращается при перемещении в эти два направления).
ЯЯ уверен, что ошибки, которые я делаю, небольшие (и) небольшие и их легко исправить, но я продолжаю придумывать «решения», которые вызывают другие проблемы
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);
}
}
Как я могу получить плеер и камерувести себя как обычный 2D-платформер с любой силой тяжести?