我正在使用Unity制作2.5D动作平台(2D平面上的3D图形),该平台利用重力移动作为主要游戏机制;这个想法是能够使任何基本方向“向下”,并使玩家能够像普通平台游戏机一样相对于当前重力方向移动。我已经降低了重力,但是我一直遇到播放器运动和相机问题。目前,玩家的动作在地面和天花板(分别为“南”和“北”)上工作正常,但是相机在玩家“北”时无法平稳地旋转。并且播放器沿世界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平台游戏机一样工作?