| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141 | 
							- using UnityEngine;
 
- namespace Dustyroom {
 
- public class OrbitMotion : MonoBehaviour {
 
-     public enum TargetMode {
 
-         Transform,
 
-         Position
 
-     }
 
-     public TargetMode targetMode = TargetMode.Position;
 
-     public Transform targetTransform;
 
-     public bool followTargetTransform = true;
 
-     public Vector3 targetOffset = Vector3.zero;
 
-     public Vector3 targetPosition;
 
-     [Space] public float distanceHorizontal = 60.0f;
 
-     public float distanceVertical = 60.0f;
 
-     public float xSpeed = 120.0f;
 
-     public float ySpeed = 120.0f;
 
-     public float damping = 3f;
 
-     [Space] public bool clampAngle = false;
 
-     public float yMinLimit = -20f;
 
-     public float yMaxLimit = 80f;
 
-     [Space] public bool allowZoom = false;
 
-     public float distanceMin = .5f;
 
-     public float distanceMax = 15f;
 
-     float _x = 0.0f;
 
-     float _y = 0.0f;
 
-     [Space] public bool autoMovement = false;
 
-     public float autoSpeedX = 0.2f;
 
-     public float autoSpeedY = 0.1f;
 
-     public float autoSpeedDistance = -0.1f;
 
-     [Space] public bool interactive = true;
 
-     private float _lastMoveTime;
 
-     [HideInInspector] public float timeSinceLastMove;
 
-     void Start() {
 
-         Vector3 angles = transform.eulerAngles;
 
-         _x = angles.y;
 
-         _y = angles.x;
 
-         // Make the rigid body not change rotation
 
-         Rigidbody rigidbody = GetComponent<Rigidbody>();
 
-         if (rigidbody != null) {
 
-             rigidbody.freezeRotation = true;
 
-         }
 
- #if (UNITY_ANDROID || UNITY_IOS) && !UNITY_EDITOR
 
-         xSpeed *= 0.2f;
 
-         ySpeed *= 0.2f;
 
- #endif
 
-         if (targetMode == TargetMode.Transform) {
 
-             if (targetTransform != null) {
 
-                 targetPosition = targetTransform.position + targetOffset;
 
-             }
 
-             else {
 
-                 Debug.LogWarning("Reference transform is not set.");
 
-             }
 
-         }
 
-     }
 
-     void Update() {
 
-         if (targetMode == TargetMode.Transform && followTargetTransform) {
 
-             if (targetTransform != null) {
 
-                 targetPosition = targetTransform.position + targetOffset;
 
-             }
 
-             else {
 
-                 Debug.LogWarning("Reference transform is not set.");
 
-             }
 
-         }
 
-         //*
 
-         bool isCameraMoving = false;
 
- #if ((UNITY_ANDROID || UNITY_IOS) && !UNITY_EDITOR)
 
-         isCameraMoving = Input.GetTouch(0).deltaPosition.sqrMagnitude > 0f;
 
- #else
 
-         isCameraMoving = Mathf.Abs(Input.GetAxis("Mouse X")) + Mathf.Abs(Input.GetAxis("Mouse Y")) > 0f;
 
- #endif
 
-         if (isCameraMoving) {
 
-             _lastMoveTime = Time.time;
 
-         }
 
-         timeSinceLastMove = Time.time - _lastMoveTime;
 
-         //*/
 
-         if (interactive && Input.GetMouseButton(0)) {
 
- #if ((UNITY_ANDROID || UNITY_IOS) && !UNITY_EDITOR)
 
-         _x += Input.GetTouch(0).deltaPosition.x * xSpeed * 40f * 0.02f;
 
-         _y -= Input.GetTouch(0).deltaPosition.y * ySpeed * 40f * 0.02f;
 
- #else
 
-         _x += Input.GetAxis("Mouse X") * xSpeed * 40f * 0.02f;
 
-         _y -= Input.GetAxis("Mouse Y") * ySpeed * 40f * 0.02f;
 
- #endif
 
-         }
 
-         else if (autoMovement) {
 
-             _x += autoSpeedX * 40f * Time.deltaTime * 10f;
 
-             _y -= autoSpeedY * 40f * Time.deltaTime * 10f;
 
-             distanceHorizontal += autoSpeedDistance;
 
-         }
 
-         if (clampAngle) {
 
-             _y = ClampAngle(_y, yMinLimit, yMaxLimit);
 
-         }
 
-         Quaternion rotation = Quaternion.Slerp(transform.rotation, Quaternion.Euler(_y, _x, 0),
 
-             Time.deltaTime * damping);
 
-         if (allowZoom) {
 
-             distanceHorizontal = Mathf.Clamp(
 
-                 distanceHorizontal - Input.GetAxis("Mouse ScrollWheel") * 5, distanceMin, distanceMax);
 
-         }
 
-         float rotationX = rotation.eulerAngles.x;
 
-         if (rotationX > 90f) {
 
-             rotationX -= 360f;
 
-         }
 
-         float usedDistance = Mathf.Lerp(distanceHorizontal, distanceVertical, Mathf.Abs(rotationX / 90f));
 
-         Vector3 negDistance = new Vector3(0.0f, 0.0f, -usedDistance);
 
-         Vector3 position = rotation * negDistance + targetPosition;
 
-         transform.rotation = rotation;
 
-         transform.position = position;
 
-     }
 
-     private static float ClampAngle(float angle, float min, float max) {
 
-         if (angle < -360f)
 
-             angle += 360f;
 
-         if (angle > 360f)
 
-             angle -= 360f;
 
-         return Mathf.Clamp(angle, min, max);
 
-     }
 
- }
 
- }
 
 
  |