具有重力转移功能的2.5D平台机

时间:2018-10-11 19:44:48

标签: c# unity3d 3d 2d

我正在使用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平台游戏机一样工作?

0 个答案:

没有答案