예제 #1
0
    public void MovementUpdate()
    {
        movementVector = new Vector3();
        if (Input.GetKey(KeyCode.W) || Input.GetKey(KeyCode.UpArrow))
        {
            movementVector += new Vector3(0, 0, 1);
        }
        if (Input.GetKey(KeyCode.S) || Input.GetKey(KeyCode.DownArrow))
        {
            movementVector += new Vector3(0, 0, -1);
        }
        if (Input.GetKey(KeyCode.A))
        {
            movementVector += new Vector3(-1, 0, 0);
        }
        if (Input.GetKey(KeyCode.D))
        {
            movementVector += new Vector3(1, 0, 0);
        }
        if (Input.GetKey(KeyCode.Space))
        {
            Jump = true;
        }

        movementVector = -movementVector.normalized;
        movementVector.Scale(v3FromFloat(WalkSpeed));

        RootCamera mainCamera  = GameObject.FindObjectOfType <RootCamera>();
        Quaternion camRotation = mainCamera.cameraBase.transform.rotation;

        movementVector  = camRotation * movementVector;
        currentMovement = Vector3.Lerp(movementVector, currentMovement, 0.1f);
        Rigidbody mover = character.GetComponent <Rigidbody>();

        if (currentMovement.magnitude > 0.1f)
        {
            if (shouldClimbStairs())
            {
                isClimbing     = true;
                mover.velocity = new Vector3(currentMovement.x, WalkSpeed, currentMovement.z);
            }
            else
            {
                isClimbing     = false;
                mover.velocity = new Vector3(currentMovement.x, mover.velocity.y, currentMovement.z);
            }
        }
        else
        {
            mover.velocity = new Vector3(0, mover.velocity.y, 0);
        }
        if (RotationMode == RotationType.CameraRelative)
        {
            currentDesiredRot = Quaternion.Euler(0, camRotation.eulerAngles.y, 0);
        }
        else if (mover.velocity.magnitude > 1)
        {
            if (currentMovement.magnitude > 0.1f)
            {
                Quaternion currentRotation  = character.transform.rotation;
                Quaternion movementRotation = Quaternion.LookRotation(-cancelY(currentMovement));
                float      angleBetween     = Quaternion.Angle(currentRotation, movementRotation);
                currentDesiredRot = Quaternion.RotateTowards(currentRotation, movementRotation, angleBetween / 10);
            }
        }
        character.transform.rotation = currentDesiredRot;
    }
예제 #2
0
 public void Start()
 {
     myCamera     = gameObject.GetComponent <Camera>();
     myRootCamera = gameObject.GetComponent <RootCamera>();
 }