标签:相机
在原有的旋转、缩放的基础上加上了“惯性”。
using UnityEngine; using System.Collections; public class CameraObserve : MonoBehaviour { public Transform targetObj; public float rotateSpeed = 100f; public float translateSpeed = 10f; public float minDistance = 3f;//缩放观察的最小距离 public float maxDistance = 15f;//缩放观察的最大距离 public bool isInertiaRot = false;//松开左键后是否会继续旋转少量角度 public bool isInertiaTra = false;//不滚滚轮后是否会继续前进少量距离 private float mouseXRecord; private float mouseScrollRecord; // Update is called once per frame void Update () { float mouseX = Input.GetAxis("Mouse X"); float mouseScroll = Input.GetAxis("Mouse ScrollWheel"); if (Input.GetMouseButton(0)) { if (mouseX != 0) { transform.RotateAround(targetObj.position, targetObj.up, mouseX * rotateSpeed * Time.deltaTime); mouseXRecord = mouseX; } } if (mouseScroll != 0) { //print(Vector3.Distance(targetObj.position,transform.position)); Vector3 a = transform.position + (targetObj.position - transform.position) * mouseScroll * translateSpeed * Time.deltaTime; float distance = Vector3.Distance(targetObj.position, a); if ((distance > minDistance) && (distance < maxDistance)) transform.position = a; mouseScrollRecord = mouseScroll; } } void LateUpdate() { if (isInertiaRot && Input.GetMouseButtonUp(0)) { InvokeRepeating("Rotate",0,Time.deltaTime); StartCoroutine(StopRotate(0.5f)); } if (isInertiaTra && (Input.GetAxis("Mouse ScrollWheel") == 0) && (mouseScrollRecord != 0)) { InvokeRepeating("Translate", 0, Time.deltaTime); StartCoroutine(StopTranslate(2f)); isInertiaTra = false; } } void Rotate() { transform.RotateAround(targetObj.position, targetObj.up, mouseXRecord * rotateSpeed * Time.deltaTime); } void Translate() { Vector3 a = transform.position + (targetObj.position - transform.position) * mouseScrollRecord * translateSpeed * Time.deltaTime; float distance = Vector3.Distance(targetObj.position, a); if ((distance > minDistance) && (distance < maxDistance)) transform.position = a; } IEnumerator StopRotate(float time) { yield return new WaitForSeconds(time); CancelInvoke("Rotate"); mouseXRecord = 0; } IEnumerator StopTranslate(float time) { yield return new WaitForSeconds(time); CancelInvoke("Translate"); mouseScrollRecord = 0; isInertiaTra = true; } }
标签:相机
原文地址:http://blog.csdn.net/lyh916/article/details/44873443