unity 控制摄像机旋转和缩放
2015-01-30 16:49
375 查看
在做项目的时候,有用到相机绕着某个物体旋转和近距离查看的功能。所以过来贴贴代码。
这就是全部的代码,target是我们要围绕的目标对象。
/// <summary> /// Mouse orbit. /// This script use to control a main camera /// </summary> using UnityEngine; using System.Collections; public class MouseOrbit : MonoBehaviour { public GameObject target; //a target look at public float xSpeed; //speed pan x public float ySpeed; //speed pan y public float yMinLimit; //y min limit public float yMaxLimit; //y max limit public float scrollSpeed; //scroll speed public float zoomMin; //zoom min public float zoomMax; //zoom max private float distance; private float distanceLerp; private Vector3 position; private bool isActivated; private float x; private float y; // Use this for initialization void Start() { //Warning when not found target if (target == null) { target = GameObject.FindGameObjectWithTag("Player"); if (target == null) { Debug.LogWarning("Don't found player tag please change player tag to Player"); } } //Setup Pos Vector3 angles = transform.eulerAngles; x = angles.y; y = angles.x; CalDistance(); } void LateUpdate() { ScrollMouse(); RotateCamera(); } //Roate camera method void RotateCamera() { if (Input.GetMouseButtonDown(1)) { isActivated = true; } if (Input.GetMouseButtonUp(1)) { isActivated = false; } if (isActivated) { y -= Input.GetAxis("Mouse Y") * ySpeed; x += Input.GetAxis("Mouse X") * xSpeed; y = ClampAngle(y, yMinLimit, yMaxLimit); Quaternion rotation = Quaternion.Euler(y, x, 0); Vector3 calPos = new Vector3(0, 0, -distanceLerp); position = rotation * calPos + target.transform.position; transform.rotation = rotation; transform.position = position; } } //Calculate Distance Method void CalDistance() { distance = zoomMax; distanceLerp = distance; Quaternion rotation = Quaternion.Euler(y, x, 0); Vector3 calPos = new Vector3(0, 0, -distanceLerp); position = rotation * calPos + target.transform.position; transform.rotation = rotation; transform.position = position; } //Scroll Mouse Method void ScrollMouse() { distanceLerp = Mathf.Lerp(distanceLerp, distance, Time.deltaTime * 5); if (Input.GetAxis("Mouse ScrollWheel") != 0) { // get the distance between camera and target distance = Vector3.Distance(transform.position, target.transform.position); distance = ScrollLimit(distance - Input.GetAxis("Mouse ScrollWheel") * scrollSpeed, zoomMin, zoomMax); } } //Scroll Limit Method float ScrollLimit(float dist, float min, float max) { if (dist < min) dist = min; if (dist > max) dist = max; return dist; } //Clamp Angle Method float ClampAngle(float angle, float min, float max) { if (angle < -360) angle += 360; if (angle > 360) angle -= 360; return Mathf.Clamp(angle, min, max); } }
这就是全部的代码,target是我们要围绕的目标对象。
相关文章推荐
- Unity通过射线碰撞选择模型,然后控制模型的移动、旋转、缩放等动作
- unityios开发--触摸屏手势控制镜头旋转与缩放
- 【Unity 3D学习】获取鼠标滑动方向(上下左右)-控制摄像机围绕物体旋转
- Unity 3D:控制相机旋转、移动、缩放等功能
- Unity3D开发之控制摄像机围绕物体旋转 平移 缩放
- 游戏开发之用摇杆控制摄像机的移动旋转缩放
- Unity 控制摄像机旋转、放大、缩小
- Unity 移动端简单手势控制(移动,旋转,缩放)
- Unity用鼠标滑轮控制摄像机缩放画面
- unity 手指移动物体旋转两个手指控制物体大小缩放
- Unity3D入门(五):鼠标控制旋转、摄像机缩放
- Unity滚轮控制UI和摄像机缩放冲突问题
- unity 鼠标控制摄像机围绕物体旋转
- unity旋转 缩放摄像机
- unity中用鼠标控制物体实现缩放、平移、旋转
- unity使用鼠标控制移动、缩放、旋转
- 用C#控制摄像机的移动 旋转 缩放
- Unity 控制物体移动 旋转 缩放
- Unity物体或摄像机的旋转缩放
- Unity3D入门(五):鼠标控制旋转、摄像机缩放