方法一:
private Transform hitTransfrom; void Update() { if (Input.GetMouseButtonDown(0)) { RaycastHit hit; Ray mouseray = Camera.main.ScreenPointToRay(Input.mousePosition); if (Physics.Raycast(mouseray, out hit)) { hitTransfrom = hit.transform; } } else if (Input.GetMouseButtonUp(0)) { hitTransfrom = null; } if (hitTransfrom) { Matrix4x4 localmatrix = hitTransfrom.worldToLocalMatrix; Vector3 vUp = localmatrix.MultiplyVector(new Vector3(0, 1, 0)); Vector3 vRight = -localmatrix.MultiplyVector(new Vector3(1, 0, 0)); float fMoveX = -Input.GetAxis("Mouse X") * Time.deltaTime * 200.0f; Quaternion rotation = Quaternion.AngleAxis(fMoveX, vUp); hitTransfrom.localRotation *= rotation; float fMoveY = -Input.GetAxis("Mouse Y") * Time.deltaTime * 200.0f; Quaternion rotoy = Quaternion.AngleAxis(fMoveY, vRight); hitTransfrom.localRotation *= rotoy; } }
using UnityEngine; using System.Collections; public class DragRotate : MonoBehaviour { void OnMouseDrag () { this.transform.Rotate(new Vector3(Input.GetAxis("Mouse Y"),-Input.GetAxis("Mouse X"),0)*6f,Space.World); } }
using UnityEngine; using System.Collections; public class DragRotate : MonoBehaviour { private bool onDrag = false; public float speed = 6f; private float tempSpeed; private float axisX; private float axisY; void OnMouseDrag () { onDrag = true; axisX=-Input.GetAxis ("Mouse X"); axisY=Input.GetAxis ("Mouse Y"); } float Rigid () { if (onDrag) { if (tempSpeed < speed) { tempSpeed += speed * Time.deltaTime*5; }else{ tempSpeed=speed; } } else { if(tempSpeed>0){ tempSpeed-=speed * Time.deltaTime; }else{ tempSpeed = 0; } } return tempSpeed; } void Update () { this.transform.Rotate (new Vector3 (axisY, axisX, 0) * Rigid (), Space.World); if (!Input.GetMouseButton (0)) { onDrag = false; } } }
using UnityEngine; using System.Collections; public class ZoomAndDrag : MonoBehaviour { public Camera MainCamera; public float ZoomMin; //滚轮的最小值 public float ZoomMax; //滚轮的最大值 private float normalDistance; //设置摄像机的景深值 private float MouseWheelSencitivity = 10.0f; //鼠标灵敏度,就是缩放的速度的快慢 private float axisX; private float axisY; public float speed = 6f; private float tempSpeed; private bool RoationOnly; void Start () { normalDistance = 50.0f; ZoomMin = 20.0f; ZoomMax = 100.0f; RoationOnly = true; } void Update () { Roation(); Zoom(); this.transform.Rotate(new Vector3(axisY, axisX, 0) * Rigid(), Space.World); //物体旋转的方法 } //自动旋转物体的方法,放在Update中调用 void Roation() { if (RoationOnly) { gameObject.transform.Rotate(Vector3.up * Time.deltaTime * 10); } } /**** *鼠标滚轮缩放物体的方法 * * **/ void Zoom() { if (Input.GetAxis("Mouse ScrollWheel") != 0) { if (normalDistance >= ZoomMin && normalDistance <= ZoomMax) { normalDistance -= Input.GetAxis("Mouse ScrollWheel") * MouseWheelSencitivity; } if (normalDistance < ZoomMin) { normalDistance = ZoomMin; } if (normalDistance > ZoomMax) { normalDistance = ZoomMax; } MainCamera.fieldOfView = normalDistance; } } /*** * * 鼠标左键控制物体360°旋转+惯性 * **/ float Rigid() { if (Input.GetMouseButton(0)) { RoationOnly = false; //当鼠标按下的时候,停止自动旋转 axisX = Input.GetAxis("Mouse X"); axisY = Input.GetAxis("Mouse Y"); if (tempSpeed < speed) { tempSpeed += speed * Time.deltaTime * 5; } else { tempSpeed = speed; } } else { RoationOnly = true; //当鼠标没有按下的时候,恢复自动旋转 if (tempSpeed > 0) { tempSpeed -= speed * Time.deltaTime; } else { tempSpeed = 0; } } return tempSpeed; } }