Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -110,6 +110,11 @@ static void Fly(SceneView sceneView) {
static void Fly(SceneView sceneView, Vector3 translationInversion, Vector3 rotationInversion) {
SyncRigWithScene();


// Apply inversion of axes for fly/grabmove mode.
Vector3 translation = Vector3.Scale(SpaceNavigator.Translation, translationInversion) * cameraFlySpeedAdjustment();


// Apply inversion of axes for fly/grabmove mode.
Vector3 translation = Vector3.Scale(SpaceNavigator.Translation, translationInversion);
Vector3 rotation = Vector3.Scale(SpaceNavigator.Rotation.eulerAngles, rotationInversion);
Expand Down Expand Up @@ -142,9 +147,9 @@ static void Orbit(SceneView sceneView) {
}

SyncRigWithScene();

// Apply inversion of axes for orbit mode.
Vector3 translation = Vector3.Scale(SpaceNavigator.Translation, Settings.OrbitInvertTranslation);
Vector3 translation = Vector3.Scale(SpaceNavigator.Translation, Settings.OrbitInvertTranslation) * cameraFlySpeedAdjustment();
Vector3 rotation = Vector3.Scale(SpaceNavigator.Rotation.eulerAngles, Settings.OrbitInvertRotation);

_camera.Translate(translation, Space.Self);
Expand Down Expand Up @@ -320,5 +325,25 @@ private static Vector3 SnapOnTranslation(Vector3 v, float snap) {
Mathf.RoundToInt(v.z / snap) * snap);
}
#endregion - Snapping -

private static float cameraFlySpeedAdjustment() {

if (Settings.Mode == OperationMode.Fly && !Settings.EnableCameraFlyspeedAdjustmentFlymode) return 1f;
if (Settings.Mode == OperationMode.Orbit && !Settings.EnableCameraFlyspeedAdjustmentOrbitmode) return 1f;

//calculate distance to selected object or world center, to adjust fly speed
Vector3 targetPosition = (Selection.activeTransform != null) ? Selection.activeTransform.position : new Vector3();
float distanceToTarget = (_camera.position - targetPosition).magnitude;
float flySpeedAdjustment = 1f;

if (distanceToTarget <= Settings.FlyspeedSlowdownDistance) {
//this is the practical maximum camera distance in Unity 2019.2, as with bigger distances the gizmos disappear
flySpeedAdjustment = Mathf.Pow(distanceToTarget * Settings.FlyspeedConstant, Settings.FlyspeedExponent);
} else {
flySpeedAdjustment = Mathf.Pow(Settings.FlyspeedSlowdownDistance * Settings.FlyspeedConstant, Settings.FlyspeedExponent) + (distanceToTarget - Settings.FlyspeedSlowdownDistance) * (Settings.FlyspeedSlowdownDistance / distanceToTarget);
}

return flySpeedAdjustment;
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,12 @@ public static class Settings {
public static float RotSens = RotSensDefault;
public static float RotSensMin = RotSensMinDefault;
public static float RotSensMax = RotSensMaxDefault;

public static bool EnableCameraFlyspeedAdjustmentFlymode = true;
public static bool EnableCameraFlyspeedAdjustmentOrbitmode = true;
public static int FlyspeedSlowdownDistance = 100000;
public static float FlyspeedExponent = 1.05f;
public static float FlyspeedConstant = 0.1f;

#if UNITY_EDITOR_OSX || UNITY_STANDALONE_OSX
public const float RotDeadDefault = 30, RotDeadMinDefault = 0, RotDeadMaxDefault = 100f;
Expand Down