コード例 #1
0
    void LateUpdate()
    {
        FpsHud hud = FpsHud.Instance;
        Camera cam = hud.PlayerCamera;

        if (!cam)
        {
            return;
        }

        Vector3 viewPort = cam.WorldToViewportPoint(TrackTransform.position);
        Vector3 v        = TrackTransform.position - cam.transform.position;

        float dn = v.sqrMagnitude / (MaxDistance * MaxDistance);
        float s  = Mathf.Lerp(ScaleFrom, ScaleTo, dn);

        if (DisplayDistance)
        {
            textObject.transform.localPosition        = new Vector3(-0.28f, -0.3f, 0);
            textObject.GetComponent <TextMesh>().text = System.Math.Round(v.magnitude, 1) + "m";
        }

        if (ClampToSides)
        {
            if (viewPort.z >= 0)
            {
                viewPort.z = 1;
            }
            else
            {
                viewPort.x = 1f - viewPort.x;
                viewPort.y = (TrackTransform.position.y > cam.transform.position.y) ? 1f : 0f;
                viewPort.z = 1;
            }

            float xMin = 0f + ClampInset.x;
            float xMax = 1f - ClampInset.x;

            float yMin = 0f + ClampInset.y;
            float yMax = 1f - ClampInset.y;

            viewPort.x = Mathf.Clamp(viewPort.x, xMin, xMax);
            viewPort.y = Mathf.Clamp(viewPort.y, yMin, yMax);

            if (viewPort.y <= yMin)
            {
                textObject.transform.localPosition = new Vector3(-0.28f, -0.3f + DisplayFontInset.y);
            }
        }

        transform.position   = FpsHud.Instance.PerspectiveCamera.ViewportToWorldPoint(viewPort);
        transform.localScale = new Vector3(s, s, s);

        renderer.enabled = true;
    }
コード例 #2
0
    void LateUpdate()
    {
        FpsHud  hud = FpsHud.Instance;
        Vector3 v   = ((TrackTransform.position + TrackOffset) - hud.ActiveCamera.transform.position).normalized;

        float xAngle = FpsHudUtils.SignedAngle(hud.ActiveCamera.transform.forward, v, Vector3.up);
        float yAngle = FpsHudUtils.SignedAngle(hud.ActiveCamera.transform.forward, v, Vector3.right);

        float hFov = hud.ActiveCamera.fov;
        float vFov = hFov * hud.ActiveCamera.aspect;

        float hFov2 = hFov / 2;
        float vFov2 = vFov / 2;

        if (xAngle < -vFov2 || xAngle > vFov2 || yAngle < -hFov2 || xAngle > hFov2)
        {
            if (ClampToSides)
            {
                if (xAngle < -90 || xAngle > 90)
                {
                    // Calculate the flipped inverse angle
                    xAngle = -FpsHudUtils.SignedAngle(-hud.ActiveCamera.transform.forward, v, Vector3.up);

                    // Recalculate yAngle
                    Vector3 yForward = Quaternion.Euler(hud.ActiveCamera.transform.rotation.eulerAngles.x, 0, 0) * Vector3.forward;

                    // Y-only angle
                    yAngle = FpsHudUtils.SignedAngle(yForward, v, Vector3.right);
                    yAngle = yAngle < 0 ? -vFov2 : vFov2;
                }

                xAngle = Mathf.Clamp(xAngle, -vFov2, vFov2);
                yAngle = Mathf.Clamp(yAngle, -vFov2, vFov2);
            }
            else
            {
                renderer.enabled = false;
                return;
            }
        }

        float xRatio = (xAngle + vFov2) / vFov;
        float yRatio = 1 - ((yAngle + hFov2) / hFov);

        float xMin = -Screen.width / 2;
        float yMin = -Screen.height / 2;

        float xPosition = xMin + Screen.width * xRatio;
        float yPosition = yMin + Screen.height * yRatio;

        renderer.enabled   = true;
        transform.position = new Vector3(xPosition, yPosition, 1).ToScreenPosition();
    }
コード例 #3
0
    public void Exit()
    {
        FpsHud hud = FpsHud.Instance;

        if (display && hud.PlayerCamera)
        {
            display        = false;
            camera.enabled = false;
            scopeOverlay.renderer.enabled = false;

            hud.PlayerCamera.cullingMask     = playerCameraCullingMask;
            hud.PlayerCamera.clearFlags      = playerCameraClearFlags;
            hud.PlayerCamera.backgroundColor = playerCameraBackgroundColor;
            hud.PlayerCamera.fieldOfView     = playerCameraFieldOfView;
        }
    }
コード例 #4
0
    public void Enter(float fieldOfView)
    {
        FpsHud hud = FpsHud.Instance;

        if (!display && hud.PlayerCamera)
        {
            display                       = true;
            camera.enabled                = true;
            camera.fieldOfView            = fieldOfView;
            scopeOverlay.renderer.enabled = true;

            playerCameraCullingMask     = hud.PlayerCamera.cullingMask;
            playerCameraClearFlags      = hud.PlayerCamera.clearFlags;
            playerCameraBackgroundColor = hud.PlayerCamera.backgroundColor;
            playerCameraFieldOfView     = hud.PlayerCamera.fieldOfView;

            hud.PlayerCamera.cullingMask     = 0;
            hud.PlayerCamera.clearFlags      = CameraClearFlags.SolidColor;
            hud.PlayerCamera.backgroundColor = Color.black;
            hud.PlayerCamera.fieldOfView     = fieldOfView;
        }
    }
コード例 #5
0
    void LateUpdate()
    {
        FpsHud hud = FpsHud.Instance;

        if (hud.PlayerCamera)
        {
            camera.transform.position = hud.PlayerCamera.transform.position;
            camera.transform.rotation = hud.PlayerCamera.transform.rotation;

            if (display)
            {
                // Clamp scope size
                scopeScale = Mathf.Clamp01(scopeScale);

                int h = Screen.height;
                int w = Screen.width;
                int s = Mathf.Clamp((int)((h < w ? h : w) * scopeScale), 0, maxScopePixelSize - 2);
                camera.pixelRect = new Rect((Screen.width / 2) - (s / 2), (Screen.height / 2) - (s / 2), s, s);

                scopeOverlay.transform.position   = (Vector3.forward * 5).ToScreenPosition();
                scopeOverlay.transform.localScale = new Vector3(s + 2, s + 2, 1);
            }
        }
    }