[Unity实战]相机观察物体
2015-04-04 15:42
507 查看
在原有的旋转、缩放的基础上加上了“惯性”。
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; } }
相关文章推荐
- 在Unity中实现可以自由观察无规则高速运动物体的相机的思路
- Unity 相机围绕物体指定观察角度和位置
- Unity学习笔记——利用脚本实现对一个物体的第三人称观察
- unity 实现了鼠标滚动放大和缩小物体暨拉近拉远相机的效果
- unity检测到某一物体不被特定的某一相机渲染
- unity 相机围绕某物体自动旋转
- unity 手指旋转物体双手控制相机的远近
- unity笔记 0 - 添加物体,预制体;施加力;移动物体,旋转物体;相机跟随;禁用物体
- unity 检测物体是否在相机视野范围内
- <Unity>鼠标拖动物体、按下鼠标左键旋转观察物体、鼠标滚轮缩放视野
- <Unity>鼠标拖动物体、按下鼠标左键旋转观察物体、鼠标滚轮缩放视野
- Unity 控制相机绕物体的旋转
- unity 用鼠标控制相机绕着物体旋转脚本
- [Unity实战]判断角色面朝一定区域是否存在物体
- Unity鼠标自由查看3D物体之控制摄相机Camera
- Unity 控制相机绕物体的旋转
- unity 相机平滑的接近物体脚本 Mathf.Smooth
- unity新手可以参考,相机360度观察一个对象
- Unity 3D鼠标操作实现旋转、缩放观察物体
- unity 相机选择物体沿射线相机平移到物体周围