예제 #1
0
    void FixedUpdate()
    {
        Vector3 toMove    = Vector3.zero;
        float   moveSpeed = speed;
        float   jpforce   = jetPackForce;

        if (gravity.IsNearPlanet())
        {
            Vector3 planetNormal = gravity.GetPlanetNormal().normalized;

            if (Input.GetKey(KeyCode.W))
            {
                Vector3 cross = Vector3.Cross(planetNormal, camera.transform.right.normalized);
                toMove += cross.normalized;
            }
            if (Input.GetKey(KeyCode.S))
            {
                Vector3 cross = Vector3.Cross(planetNormal, -camera.transform.right.normalized);
                toMove += cross.normalized;
            }
            if (Input.GetKey(KeyCode.A))
            {
                Vector3 cross = Vector3.Cross(planetNormal, camera.transform.forward.normalized);
                toMove += cross.normalized;
            }
            if (Input.GetKey(KeyCode.D))
            {
                Vector3 cross = Vector3.Cross(planetNormal, -camera.transform.forward.normalized);
                toMove += cross.normalized;
            }

            if (Input.GetKey(KeyCode.LeftControl))
            {
                jpforce   = jpforce * 5f;
                moveSpeed = moveSpeed * 5f;
            }

            if (toMove.sqrMagnitude > 0.1f)
            {
                if (Input.GetKey(KeyCode.LeftShift))
                {
                    moveSpeed = moveSpeed * sprintMultiplier;
                }

                toMove = rb.position + toMove.normalized * moveSpeed * Time.fixedDeltaTime;

                if (!Input.GetKey(KeyCode.Space))
                {
                    RaycastHit hit;
                    if (Physics.Raycast(toMove.normalized, planetNormal, out hit, raycastDistance))
                    {
                        toMove = hit.point - (planetNormal * height);
                    }
                }
                rb.MovePosition(toMove);
            }

            if (Input.GetKey(KeyCode.Space))
            {
                rb.AddForce(-planetNormal * jpforce * Time.fixedDeltaTime);
            }
        }
        else
        {
            Vector3 moveTo = Vector3.zero;

            if (Input.GetKey(KeyCode.W))
            {
                moveTo += camera.transform.forward.normalized;
            }
            if (Input.GetKey(KeyCode.S))
            {
                moveTo -= camera.transform.forward.normalized;
            }
            if (Input.GetKey(KeyCode.A))
            {
                moveTo -= camera.transform.right.normalized;
            }
            if (Input.GetKey(KeyCode.D))
            {
                moveTo += camera.transform.right.normalized;
            }

            if (Input.GetKey(KeyCode.LeftControl))
            {
                jpforce = jpforce * 10f;
            }
            rb.AddForce(moveTo * jpforce * Time.fixedDeltaTime);
        }
    }