Esempio n. 1
0
    void UpdateCameraLocked(float distDelta, float xDelta, float yDelta)
    {
        //First rotate the player's character
        if (!Mathf.Approximately(xDelta, 0f))
        {
            float sign = Mathf.Sign(xDelta);
            m_playerController.Turn(sign * 55f + (xDelta * 100f), (sign < 0) ? false : true);
        }

        //Now update the camera position
        y -= yDelta;

        y = MiscHelpers.ClampAngle(y, yMinLimit, yMaxLimit);

        Quaternion rotation = Quaternion.Euler(y, m_curCharacterTarget.transform.rotation.eulerAngles.y, 0f);

        distance = Mathf.Clamp(distance - distDelta * 5, distanceMin, distanceMax);

        RaycastHit hit;

        if (Physics.Linecast(target.position, transform.position, out hit, 1 << LayerMask.NameToLayer("Terrain")))
        {
            distance -= hit.distance;
        }
        Vector3 negDistance = new Vector3(0.0f, 0.0f, -distance);
        Vector3 position    = rotation * negDistance + target.position;

        transform.rotation = rotation;
        transform.position = position;
    }
Esempio n. 2
0
    void UpdateCamera(float xScreenDelta, float yScreenDelta)
    {
        if (target)
        {
            target.transform.root.Rotate(Vector3.up, 45f * xScreenDelta * Time.deltaTime);

            float   Yrotation = target.transform.root.rotation.eulerAngles.y;
            Vector3 position  = target.position;

            x += yScreenDelta;
            x  = MiscHelpers.ClampAngle(x, yMinLimit, yMaxLimit);

            Vector3 rotation = new Vector3(x, Yrotation, 0);

            transform.rotation = Quaternion.Euler(rotation);
            transform.position = position;
        }
    }
Esempio n. 3
0
    void UpdateCameraFree(float distDelta, float xDelta, float yDelta)
    {
        x += xDelta; //Input.GetAxis("Mouse X") * xSpeed /** distance*/ * 0.02f;
        y -= yDelta; //Input.GetAxis("Mouse Y") * ySpeed * 0.02f;

        y = MiscHelpers.ClampAngle(y, yMinLimit, yMaxLimit);

        Quaternion rotation = Quaternion.Euler(y, x, 0);

        distance = Mathf.Clamp(distance - distDelta * 5, distanceMin, distanceMax);

        RaycastHit hit;

        if (Physics.Linecast(target.position, transform.position, out hit, 1 << LayerMask.NameToLayer("Terrain")))
        {
            distance -= hit.distance;
        }
        Vector3 negDistance = new Vector3(0.0f, 0.0f, -distance);
        Vector3 position    = rotation * negDistance + target.position;

        transform.rotation = rotation;
        transform.position = position;
    }