|
|
- using UnityEngine;
- using System.Collections;
-
- public class ExplorationCamera : MonoBehaviour
- {
- //Turn
- [Range(1f, 50)]
- public float sensitivity = 30;
- [Range(.1f, 50)]
- public float smoothing = 5f;
-
- //Movement
- private float speedZ;
- private float speedX;
- private float speedY;
- [Range(.1f, 10)]
- public float Speed = .1f;
- [HideInInspector]
- public float InitialSpeed = .1f;
- [HideInInspector]
- public float FOV;
- private float initialFOV;
- Vector2 initialLook;
- Vector2 Look;
- private Vector3 MovementDirection;
- public float MaxAcceleration = 4;
- [Range(1f, 10)]
- public float AccelerationSmoothing = 10, SpeedSmooth = 1;
- Vector2 _smoothMouse;
- public bool HideCursor = false;
- float focalLength = 0, focalSize = 1;
- public bool ConstantMove = false;
- Camera ThisCamera;
- [HideInInspector]
- public float tilt;
- void Start()
- {
-
- try
- {
- //gamepad
- Input.GetAxis("LookHorizontal");
- }
- catch
- {
- print("Import the custom input to support gamepad in this camera script\n http://davidmiranda.me/files/FogVolume3/InputManager.asset");
- }
-
-
- //if (this.GetComponent<UnityStandardAssets.ImageEffects.DepthOfField>())
- //{
- // focalLength = this.GetComponent<UnityStandardAssets.ImageEffects.DepthOfField>().focalLength;
- // focalSize = this.GetComponent<UnityStandardAssets.ImageEffects.DepthOfField>().focalSize;
- //}
- }
- Vector2 lastPos;
-
- void OnGUI()
- {
- //ratón
- if (Event.current.type == EventType.MouseDown)
- {
- lastPos = Event.current.mousePosition;
- }
- else if (Event.current.type == EventType.MouseDrag || Event.current.type == EventType.MouseMove)
- {
- Vector3 diff = Event.current.mousePosition - lastPos;
- Look += new Vector2(diff.x * sensitivity / 50, -diff.y * sensitivity / 50);
- lastPos = Event.current.mousePosition;
- }
- }
- public float tiltSmoothing = 50, FOVTransitionSpeed = .1f;
- public float inclination = 13;
- public bool ApplyGravity;
- [Range(0f, 1)]
- public float gravityAccelerationScale = .1f;
- void OnDestroy()
- { Cursor.visible = true; }
- void FixedUpdate()
- {
- // if (Input.GetKey(KeyCode.Escape)) Application.Quit();
-
-
-
- try
- {
- //gamepad
- if (Mathf.Abs(Input.GetAxis("LookHorizontal")) > 0.017f || Mathf.Abs(Input.GetAxis("LookVertical")) > 0.017f)
- {
- Look += new Vector2(Input.GetAxis("LookHorizontal"), -Input.GetAxis("LookVertical")) * sensitivity;
-
- if (Input.GetAxis("LookHorizontal") > 0)
- tilt = Mathf.Lerp(tilt, -inclination * Mathf.Abs(Input.GetAxis("LookHorizontal")) * sensitivity, 1f / tiltSmoothing);
- else
- tilt = Mathf.Lerp(tilt, inclination * Mathf.Abs(Input.GetAxis("LookHorizontal")) * sensitivity, 1f / tiltSmoothing);
-
-
- }
- }
- catch
- {
- //
- }
- tilt = Mathf.Lerp(tilt, 0, 1f / tiltSmoothing);
- //DOF
- if (Input.GetKey(KeyCode.PageDown))
- focalLength -= .05f;
- if (Input.GetKey(KeyCode.PageUp))
- focalLength += .05f;
-
- if (Input.GetKey(KeyCode.End))
- focalSize -= .05f;
- if (Input.GetKey(KeyCode.Home))
- focalSize += .05f;
- //if (this.GetComponent<UnityStandardAssets.ImageEffects.DepthOfField>())
- //{
- // this.GetComponent<UnityStandardAssets.ImageEffects.DepthOfField>().focalLength = focalLength;
- // this.GetComponent<UnityStandardAssets.ImageEffects.DepthOfField>().focalSize = focalSize;
- //}
- //Turn interpolation
- _smoothMouse.x = Mathf.Lerp(_smoothMouse.x, Look.x, 1f / smoothing);
- _smoothMouse.y = Mathf.Lerp(_smoothMouse.y, Look.y, 1f / smoothing);
-
- //Aplica giro suave
- transform.localEulerAngles = new Vector3(-_smoothMouse.y, _smoothMouse.x, tilt);
-
-
- //Traslación:
- if (Input.GetKey(KeyCode.W) || Input.GetAxis("Vertical") > 0 || ConstantMove)
- {
- MovementDirection = new Vector3(0, 0, 1);
- speedZ = Mathf.Lerp(speedZ, Speed, 1f / smoothing);
- }
-
-
-
- if (Input.GetKey(KeyCode.S) || Input.GetAxis("Vertical") < 0)
- {
- MovementDirection = new Vector3(0, 0, -1);
- speedZ = Mathf.Lerp(speedZ, -Speed, 1f / smoothing);
- }
-
-
-
- if (Input.GetKey(KeyCode.A) || Input.GetAxis("Horizontal") < 0)
- {
- MovementDirection = new Vector3(-1, 0, 0);
- speedX = Mathf.Lerp(speedX, -Speed, 1f / smoothing);
-
- }
-
- if (Input.GetKey(KeyCode.D) || Input.GetAxis("Horizontal") > 0)
- {
- MovementDirection = new Vector3(1, 0, 0);
- speedX = Mathf.Lerp(speedX, Speed, 1f / smoothing);
-
- }
-
-
- if (Input.GetKey(KeyCode.Q) || Input.GetKey(KeyCode.JoystickButton4))
- {
- MovementDirection = new Vector3(0, -1, 0);
- speedY = Mathf.Lerp(speedY, -Speed, 1f / smoothing);
- }
- if (Input.GetKey(KeyCode.E) || Input.GetKey(KeyCode.JoystickButton5))
- {
- MovementDirection = new Vector3(0, 1, 0);
- speedY = Mathf.Lerp(speedY, Speed, 1f / smoothing);
- }
-
- //desaceleración
- speedZ = Mathf.Lerp(speedZ, 0, 1f / smoothing);
- MovementDirection.z = speedZ;
- speedY = Mathf.Lerp(speedY, 0, 1f / smoothing);
- MovementDirection.y = speedY;
- speedX = Mathf.Lerp(speedX, 0, 1f / smoothing);
- MovementDirection = new Vector3(speedX, speedY, speedZ);
- if (ApplyGravity)
- {
- MovementDirection += Physics.gravity * gravityAccelerationScale;
- }
- transform.Translate(MovementDirection);
- // transform.Rotate(Vector3.forward, tilt * 150);
- //Speed Ratón
- Speed = Mathf.Clamp(Speed, .001f, 100f);
- if (Input.GetMouseButton(1))
- {
- InitialSpeed += Input.GetAxis("Mouse ScrollWheel") * .5f;
- InitialSpeed = Mathf.Max(.1f, InitialSpeed);
- }
- //FOV
- if (Input.GetMouseButton(1) & Input.GetKey(KeyCode.C) & FOV > 5)
- {
- FOV -= 1;
- }
- if (Input.GetMouseButton(1) & Input.GetKey(KeyCode.Z) & FOV < 120)
- {
- FOV += 1;
- }
-
- //Al soltar la tecla:
- if (Input.GetMouseButton(1) == false)
- {
- FOV = Mathf.Lerp(FOV, initialFOV, FOVTransitionSpeed);//El último valor sería la velocidad a la que vuelve al fov original
- //Rueda:
- // speedZ += Input.GetAxis("Mouse ScrollWheel");
- }
- //Aplicar
- //
- //
- if (ThisCamera)
- if (ThisCamera.stereoEnabled == false)
- GetComponent<Camera>().fieldOfView = FOV;
-
-
- }
- float TriggerValue = 0;
-
- void Update()
- {
-
-
- //Extra velocidad:
- try
- {
- TriggerValue = Mathf.Pow(Input.GetAxis("FasterCamera") * 1 / AccelerationSmoothing + 1, 2);
- }
- catch { }
- //print(Speed);
- if (Input.GetKeyDown(KeyCode.LeftShift))
- {
-
- Speed *= MaxAcceleration;
-
- }
-
- try
- {
- if (Input.GetAxis("FasterCamera") > 0 && Speed < InitialSpeed * MaxAcceleration)
- {
- Speed *= TriggerValue;
-
- }
- else
- if (!Input.GetKey(KeyCode.LeftShift))
- Speed = Mathf.Lerp(Speed, InitialSpeed, 1 / AccelerationSmoothing);
- }
- catch
- {
- if (!Input.GetKey(KeyCode.LeftShift))
- Speed = Mathf.Lerp(Speed, InitialSpeed, 1 / AccelerationSmoothing);
- }
- // print(Speed);
- if (Input.GetKeyUp(KeyCode.LeftShift))
- {
- Speed /= MaxAcceleration;
- }
- }
-
-
- void OnEnable()
- {
- if (GetComponent<Camera>())
- ThisCamera = GetComponent<Camera>();
- InitialSpeed = Speed;
- if (HideCursor)
- Cursor.visible = false;
-
- if(ThisCamera)
- FOV = this.gameObject.GetComponent<Camera>().fieldOfView;
- initialFOV = FOV;
- initialLook = new Vector2(transform.eulerAngles.y, transform.eulerAngles.x * -1);
- // Debug.Log (transform.eulerAngles);
- Look = initialLook;
- _smoothMouse = initialLook;
- }
- }
|