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; }
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(); }
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; } }
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; } }
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); } } }