| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292 | 
							- using UnityEngine;
 
- using System.Collections;
 
- namespace TMPro.Examples
 
- {
 
-     
 
-     public class CameraController : MonoBehaviour
 
-     {
 
-         public enum CameraModes { Follow, Isometric, Free }
 
-         private Transform cameraTransform;
 
-         private Transform dummyTarget;
 
-         public Transform CameraTarget;
 
-         public float FollowDistance = 30.0f;
 
-         public float MaxFollowDistance = 100.0f;
 
-         public float MinFollowDistance = 2.0f;
 
-         public float ElevationAngle = 30.0f;
 
-         public float MaxElevationAngle = 85.0f;
 
-         public float MinElevationAngle = 0f;
 
-         public float OrbitalAngle = 0f;
 
-         public CameraModes CameraMode = CameraModes.Follow;
 
-         public bool MovementSmoothing = true;
 
-         public bool RotationSmoothing = false;
 
-         private bool previousSmoothing;
 
-         public float MovementSmoothingValue = 25f;
 
-         public float RotationSmoothingValue = 5.0f;
 
-         public float MoveSensitivity = 2.0f;
 
-         private Vector3 currentVelocity = Vector3.zero;
 
-         private Vector3 desiredPosition;
 
-         private float mouseX;
 
-         private float mouseY;
 
-         private Vector3 moveVector;
 
-         private float mouseWheel;
 
-         // Controls for Touches on Mobile devices
 
-         //private float prev_ZoomDelta;
 
-         private const string event_SmoothingValue = "Slider - Smoothing Value";
 
-         private const string event_FollowDistance = "Slider - Camera Zoom";
 
-         void Awake()
 
-         {
 
-             if (QualitySettings.vSyncCount > 0)
 
-                 Application.targetFrameRate = 60;
 
-             else
 
-                 Application.targetFrameRate = -1;
 
-             if (Application.platform == RuntimePlatform.IPhonePlayer || Application.platform == RuntimePlatform.Android)
 
-                 Input.simulateMouseWithTouches = false;
 
-             cameraTransform = transform;
 
-             previousSmoothing = MovementSmoothing;
 
-         }
 
-         // Use this for initialization
 
-         void Start()
 
-         {
 
-             if (CameraTarget == null)
 
-             {
 
-                 // If we don't have a target (assigned by the player, create a dummy in the center of the scene).
 
-                 dummyTarget = new GameObject("Camera Target").transform;
 
-                 CameraTarget = dummyTarget;
 
-             }
 
-         }
 
-         // Update is called once per frame
 
-         void LateUpdate()
 
-         {
 
-             GetPlayerInput();
 
-             // Check if we still have a valid target
 
-             if (CameraTarget != null)
 
-             {
 
-                 if (CameraMode == CameraModes.Isometric)
 
-                 {
 
-                     desiredPosition = CameraTarget.position + Quaternion.Euler(ElevationAngle, OrbitalAngle, 0f) * new Vector3(0, 0, -FollowDistance);
 
-                 }
 
-                 else if (CameraMode == CameraModes.Follow)
 
-                 {
 
-                     desiredPosition = CameraTarget.position + CameraTarget.TransformDirection(Quaternion.Euler(ElevationAngle, OrbitalAngle, 0f) * (new Vector3(0, 0, -FollowDistance)));
 
-                 }
 
-                 else
 
-                 {
 
-                     // Free Camera implementation
 
-                 }
 
-                 if (MovementSmoothing == true)
 
-                 {
 
-                     // Using Smoothing
 
-                     cameraTransform.position = Vector3.SmoothDamp(cameraTransform.position, desiredPosition, ref currentVelocity, MovementSmoothingValue * Time.fixedDeltaTime);
 
-                     //cameraTransform.position = Vector3.Lerp(cameraTransform.position, desiredPosition, Time.deltaTime * 5.0f);
 
-                 }
 
-                 else
 
-                 {
 
-                     // Not using Smoothing
 
-                     cameraTransform.position = desiredPosition;
 
-                 }
 
-                 if (RotationSmoothing == true)
 
-                     cameraTransform.rotation = Quaternion.Lerp(cameraTransform.rotation, Quaternion.LookRotation(CameraTarget.position - cameraTransform.position), RotationSmoothingValue * Time.deltaTime);
 
-                 else
 
-                 {
 
-                     cameraTransform.LookAt(CameraTarget);
 
-                 }
 
-             }
 
-         }
 
-         void GetPlayerInput()
 
-         {
 
-             moveVector = Vector3.zero;
 
-             // Check Mouse Wheel Input prior to Shift Key so we can apply multiplier on Shift for Scrolling
 
-             mouseWheel = Input.GetAxis("Mouse ScrollWheel");
 
-             float touchCount = Input.touchCount;
 
-             if (Input.GetKey(KeyCode.LeftShift) || Input.GetKey(KeyCode.RightShift) || touchCount > 0)
 
-             {
 
-                 mouseWheel *= 10;
 
-                 if (Input.GetKeyDown(KeyCode.I))
 
-                     CameraMode = CameraModes.Isometric;
 
-                 if (Input.GetKeyDown(KeyCode.F))
 
-                     CameraMode = CameraModes.Follow;
 
-                 if (Input.GetKeyDown(KeyCode.S))
 
-                     MovementSmoothing = !MovementSmoothing;
 
-                 // Check for right mouse button to change camera follow and elevation angle
 
-                 if (Input.GetMouseButton(1))
 
-                 {
 
-                     mouseY = Input.GetAxis("Mouse Y");
 
-                     mouseX = Input.GetAxis("Mouse X");
 
-                     if (mouseY > 0.01f || mouseY < -0.01f)
 
-                     {
 
-                         ElevationAngle -= mouseY * MoveSensitivity;
 
-                         // Limit Elevation angle between min & max values.
 
-                         ElevationAngle = Mathf.Clamp(ElevationAngle, MinElevationAngle, MaxElevationAngle);
 
-                     }
 
-                     if (mouseX > 0.01f || mouseX < -0.01f)
 
-                     {
 
-                         OrbitalAngle += mouseX * MoveSensitivity;
 
-                         if (OrbitalAngle > 360)
 
-                             OrbitalAngle -= 360;
 
-                         if (OrbitalAngle < 0)
 
-                             OrbitalAngle += 360;
 
-                     }
 
-                 }
 
-                 // Get Input from Mobile Device
 
-                 if (touchCount == 1 && Input.GetTouch(0).phase == TouchPhase.Moved)
 
-                 {
 
-                     Vector2 deltaPosition = Input.GetTouch(0).deltaPosition;
 
-                     // Handle elevation changes
 
-                     if (deltaPosition.y > 0.01f || deltaPosition.y < -0.01f)
 
-                     {
 
-                         ElevationAngle -= deltaPosition.y * 0.1f;
 
-                         // Limit Elevation angle between min & max values.
 
-                         ElevationAngle = Mathf.Clamp(ElevationAngle, MinElevationAngle, MaxElevationAngle);
 
-                     }
 
-                     // Handle left & right 
 
-                     if (deltaPosition.x > 0.01f || deltaPosition.x < -0.01f)
 
-                     {
 
-                         OrbitalAngle += deltaPosition.x * 0.1f;
 
-                         if (OrbitalAngle > 360)
 
-                             OrbitalAngle -= 360;
 
-                         if (OrbitalAngle < 0)
 
-                             OrbitalAngle += 360;
 
-                     }
 
-                 }
 
-                 // Check for left mouse button to select a new CameraTarget or to reset Follow position
 
-                 if (Input.GetMouseButton(0))
 
-                 {
 
-                     Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
 
-                     RaycastHit hit;
 
-                     if (Physics.Raycast(ray, out hit, 300, 1 << 10 | 1 << 11 | 1 << 12 | 1 << 14))
 
-                     {
 
-                         if (hit.transform == CameraTarget)
 
-                         {
 
-                             // Reset Follow Position
 
-                             OrbitalAngle = 0;
 
-                         }
 
-                         else
 
-                         {
 
-                             CameraTarget = hit.transform;
 
-                             OrbitalAngle = 0;
 
-                             MovementSmoothing = previousSmoothing;
 
-                         }
 
-                     }
 
-                 }
 
-                 if (Input.GetMouseButton(2))
 
-                 {
 
-                     if (dummyTarget == null)
 
-                     {
 
-                         // We need a Dummy Target to anchor the Camera
 
-                         dummyTarget = new GameObject("Camera Target").transform;
 
-                         dummyTarget.position = CameraTarget.position;
 
-                         dummyTarget.rotation = CameraTarget.rotation;
 
-                         CameraTarget = dummyTarget;
 
-                         previousSmoothing = MovementSmoothing;
 
-                         MovementSmoothing = false;
 
-                     }
 
-                     else if (dummyTarget != CameraTarget)
 
-                     {
 
-                         // Move DummyTarget to CameraTarget
 
-                         dummyTarget.position = CameraTarget.position;
 
-                         dummyTarget.rotation = CameraTarget.rotation;
 
-                         CameraTarget = dummyTarget;
 
-                         previousSmoothing = MovementSmoothing;
 
-                         MovementSmoothing = false;
 
-                     }
 
-                     mouseY = Input.GetAxis("Mouse Y");
 
-                     mouseX = Input.GetAxis("Mouse X");
 
-                     moveVector = cameraTransform.TransformDirection(mouseX, mouseY, 0);
 
-                     dummyTarget.Translate(-moveVector, Space.World);
 
-                 }
 
-             }
 
-             // Check Pinching to Zoom in - out on Mobile device
 
-             if (touchCount == 2)
 
-             {
 
-                 Touch touch0 = Input.GetTouch(0);
 
-                 Touch touch1 = Input.GetTouch(1);
 
-                 Vector2 touch0PrevPos = touch0.position - touch0.deltaPosition;
 
-                 Vector2 touch1PrevPos = touch1.position - touch1.deltaPosition;
 
-                 float prevTouchDelta = (touch0PrevPos - touch1PrevPos).magnitude;
 
-                 float touchDelta = (touch0.position - touch1.position).magnitude;
 
-                 float zoomDelta = prevTouchDelta - touchDelta;
 
-                 if (zoomDelta > 0.01f || zoomDelta < -0.01f)
 
-                 {
 
-                     FollowDistance += zoomDelta * 0.25f;
 
-                     // Limit FollowDistance between min & max values.
 
-                     FollowDistance = Mathf.Clamp(FollowDistance, MinFollowDistance, MaxFollowDistance);
 
-                 }
 
-             }
 
-             // Check MouseWheel to Zoom in-out
 
-             if (mouseWheel < -0.01f || mouseWheel > 0.01f)
 
-             {
 
-                 FollowDistance -= mouseWheel * 5.0f;
 
-                 // Limit FollowDistance between min & max values.
 
-                 FollowDistance = Mathf.Clamp(FollowDistance, MinFollowDistance, MaxFollowDistance);
 
-             }
 
-         }
 
-     }
 
- }
 
 
  |