private static void DrawMountedRigGizmos(MountedCameraRig rig, GizmoType gizmoType) { Transform rigCenter = (rig.FollowVehicleViewTransform ?? rig.FollowVehicle?.transform) ?? rig.transform; Vector3 offsetFromTrackCenter = (Vector3.right * rig.FollowVehicle?.Controller?.ClosestPathDistanceToPoint) ?? Vector3.zero; // Align gizmos with rig transform by moving to local space. Matrix4x4 originalMatrix = Handles.matrix; Handles.matrix = rigCenter.localToWorldMatrix; // Rig car. DrawTargetingGizmos(Vector3.zero, offsetFromTrackCenter, rig); DrawCarGizmos(Vector3.zero, rigCenter.up, rigCenter.right, AZURE); // Lookat target. if (rig.LookAtVehicle != null && rig.FollowVehicle != null && Application.isPlaying) { Vector3 relativeLookAtPosition = TrackHelper.GetRelativePosition3D(rig.LookAtVehicle, rig.FollowVehicle); Handles.color = Color.white; Handles.DrawDottedLine(Vector3.zero, relativeLookAtPosition, DOT_SIZE); DrawCarGizmos(relativeLookAtPosition, rigCenter.transform.up, rigCenter.transform.right, Color.white); } Handles.matrix = originalMatrix; }
private static void DrawTargetingGizmos(Vector3 rigCenter, Vector3 offsetFromTrackCenter, MountedCameraRig rig) { Vector3 trackCenter = rigCenter - offsetFromTrackCenter; Vector3 trackWidthOffset = new Vector3(HALF_TRACK_WIDTH, 0, 0); Vector3 minDistanceOffset = new Vector3(0, 0, rig.MinRelativeDistance); Vector3 idealDistanceOffset = new Vector3(0, 0, rig.IdealRelativeDistance); Vector3 maxDistanceOffset = new Vector3(0, 0, rig.MaxRelativeDistance); // Distances. Handles.color = Color.yellow; DrawDistanceLines(trackCenter, minDistanceOffset, trackWidthOffset); Handles.color = Color.green; DrawDottedDistanceLines(trackCenter, idealDistanceOffset, trackWidthOffset, DOT_SIZE); Handles.color = Color.yellow; DrawDistanceLines(trackCenter, maxDistanceOffset, trackWidthOffset); // Track edges within targeting area. Vector3 frontRightCornerOffset = maxDistanceOffset + trackWidthOffset; Vector3 frontLeftCornerOffset = maxDistanceOffset - trackWidthOffset; Handles.color = AZURE; Handles.DrawLine(trackCenter + frontRightCornerOffset, trackCenter - frontLeftCornerOffset); Handles.DrawLine(trackCenter + frontLeftCornerOffset, trackCenter - frontRightCornerOffset); // Track edges beyond max distance. Handles.DrawDottedLine(trackCenter + frontRightCornerOffset, trackCenter + frontRightCornerOffset + Vector3.forward * HALF_TRACK_WIDTH, DOT_SIZE); Handles.DrawDottedLine(trackCenter + frontLeftCornerOffset, trackCenter + frontLeftCornerOffset + Vector3.forward * HALF_TRACK_WIDTH, DOT_SIZE); Handles.DrawDottedLine(trackCenter - frontRightCornerOffset, trackCenter - frontRightCornerOffset - Vector3.forward * HALF_TRACK_WIDTH, DOT_SIZE); Handles.DrawDottedLine(trackCenter - frontLeftCornerOffset, trackCenter - frontLeftCornerOffset - Vector3.forward * HALF_TRACK_WIDTH, DOT_SIZE); // Angle cull area. float dotGizmoRadius = Mathf.Sqrt((rig.MaxRelativeDistance * rig.MaxRelativeDistance) + (HALF_TRACK_WIDTH * HALF_TRACK_WIDTH)); float cullArcAngle = rig.CullAngle * 2f; Vector3 arcStartVector = Quaternion.Euler(0, -rig.CullAngle, 0) * Vector3.forward; Handles.color = TRANSLUCENT_YELLOW; DrawAngleArcs(rigCenter, arcStartVector, cullArcAngle, dotGizmoRadius); Handles.color = Color.yellow; DrawWireAngleArcs(rigCenter, arcStartVector, cullArcAngle, dotGizmoRadius); // Ideal angle. Vector3 idealDirection = Quaternion.Euler(0, -rig.IdealAngle, 0) * Vector3.forward; Handles.color = Color.green; DrawDottedAngleLines(rigCenter, idealDirection, dotGizmoRadius, DOT_SIZE); DrawDottedAngleLines(rigCenter, -idealDirection, dotGizmoRadius, DOT_SIZE); // Ideal car positions. Vector3 idealCarPosition = new Vector3(idealDirection.x / idealDirection.z * rig.IdealRelativeDistance, 0, rig.IdealRelativeDistance); Vector3 reflectedIdealCarPosition = Vector3.Reflect(-idealCarPosition, Vector3.forward); DrawCarGizmos(rigCenter + idealCarPosition, Vector3.up, Vector3.right, Color.green); DrawCarGizmos(rigCenter + reflectedIdealCarPosition, Vector3.up, Vector3.right, Color.green); DrawCarGizmos(rigCenter - idealCarPosition, Vector3.up, Vector3.right, Color.green); DrawCarGizmos(rigCenter - reflectedIdealCarPosition, Vector3.up, Vector3.right, Color.green); }