123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145 |
- using UnityEngine;
- using System.Collections;
- public class FlyCamera : MonoBehaviour
- {
- /*
- Writen by Windexglow 11-13-10. Use it, edit it, steal it I don't care.
- Converted to C# 27-02-13 - no credit wanted.
- Simple flycam I made, since I couldn't find any others made public.
- Made simple to use (drag and drop, done) for regular keyboard layout
- wasd : basic movement
- shift : Makes camera accelerate
- space : Moves camera on X and Z axis only. So camera doesn't gain any height*/
- public float mainSpeed = 100.0f; //regular speed
- public float shiftAdd = 250.0f; //multiplied by how long shift is held. Basically running
- public float maxShift = 1000.0f; //Maximum speed when holdin gshift
- public float camSens = 0.25f; //How sensitive it with mouse
- public bool rotateOnlyIfMousedown = true;
- public bool movementStaysFlat = true;
- private Vector3 lastMouse = new Vector3(255, 255, 255); //kind of in the middle of the screen, rather than at the top (play)
- private float totalRun = 1.0f;
- void Update()
- {
- if (Input.GetMouseButtonDown(1))
- lastMouse = Input.mousePosition; // $CTK reset when we begin
- if (!rotateOnlyIfMousedown ||
- (rotateOnlyIfMousedown && Input.GetMouseButton(1)))
- {
- lastMouse = Input.mousePosition - lastMouse;
- lastMouse = new Vector3(-lastMouse.y * camSens, lastMouse.x * camSens, 0);
- lastMouse = new Vector3(transform.eulerAngles.x + lastMouse.x, transform.eulerAngles.y + lastMouse.y, 0);
- transform.eulerAngles = lastMouse;
- lastMouse = Input.mousePosition;
- //Mouse camera angle done.
- }
- //Keyboard commands
- Vector3 p = GetBaseInput();
- foreach (Touch touch in Input.touches)
- {
- if (touch.position.x < Screen.width / 2)
- {
- Touch moveTouch = touch;
- p = moveTouch.deltaPosition.normalized;
- }
- else
- {
- transform.eulerAngles = new Vector3(transform.eulerAngles.y+camSens*touch.deltaPosition.normalized.y,transform.eulerAngles.x + camSens*touch.deltaPosition.normalized.x, 0);
- }
- }
- if (Input.GetKey(KeyCode.LeftShift))
- {
- totalRun += Time.deltaTime;
- p = p * totalRun * shiftAdd;
- p.x = Mathf.Clamp(p.x, -maxShift, maxShift);
- p.y = Mathf.Clamp(p.y, -maxShift, maxShift);
- p.z = Mathf.Clamp(p.z, -maxShift, maxShift);
- }
- else
- {
- totalRun = Mathf.Clamp(totalRun * 0.5f, 1f, 1000f);
- p = p * mainSpeed;
- }
- p = p * Time.deltaTime;
- Vector3 newPosition = transform.position;
- if (Input.GetKey(KeyCode.Space)
- || (movementStaysFlat && !(rotateOnlyIfMousedown && Input.GetMouseButton(1))))
- {
- //If player wants to move on X and Z axis only
- transform.Translate(p);
- newPosition.x = transform.position.x;
- newPosition.z = transform.position.z;
- transform.position = newPosition;
- }
- else
- {
- transform.Translate(p);
- }
- }
- private Vector3 GetBaseInput()
- {
- //returns the basic values, if it's 0 than it's not active.
-
- Vector3 p_Velocity = new Vector3();
- if (Input.GetKey(KeyCode.W))
- {
- p_Velocity += new Vector3(0, 0, 100);
- }
- if (Input.GetKey(KeyCode.S))
- {
- p_Velocity += new Vector3(0, 0, -100);
- }
- if (Input.GetKey(KeyCode.A))
- {
- p_Velocity += new Vector3(-100, 0, 0);
- }
- if (Input.GetKey(KeyCode.D))
- {
- p_Velocity += new Vector3(100, 0, 0);
- }
- return p_Velocity;
- }
- }
- /*
- public class FingerTouch : MonoBehaviour{
- Vector2 touchStart;
- bool active;
- Vector2 direction;
- public int fingerId;
- private void Awake()
- {
-
- }
- public void Update()
- {
- foreach (Touch touch in Input.touches)
- {
- if (touch.phase == TouchPhase.Began)
- {
- active = true;
- touchStart = touch.position;
- }
- else if (touch.phase == TouchPhase.Ended || touch.phase == TouchPhase.Canceled)
- {
- //we stop the movement
- direction = Vector2.zero;
- active = false;
- }
- else if(touch.phase == TouchPhase.Moved)
- {
- direction = touch.position - touchStart;
- }
- }
- }
- }
- */
|