绕着一个点旋转 :
transform.RotateAround(Vector3.zero, Vector3.up, speed* Time.deltaTime );
第一个参数,点的位置。第二个参数,法线方向,第三个参数,速度.如图时针旋转。
旋转固定角度
gameObject.transform.rotation = Quaternion.Slerp(gameObject.transform.rotation, Quaternion.Euler(60,0, 0), 6);
第一个参数起始角度,第二参数结束角度,第三个参数旋转工消耗的时间。
static function LookRotation (forward : Vector3, upwards : Vector3 = Vector3.up) : Quaternion
创建一个旋转,沿着forward(z轴)并且头部沿着upwards(y轴)的约束注视。也就是建立一个旋转,使z轴朝向view y轴朝向up。
public Transform target; void Update() { Vector3 relativePos = target.position - transform.position; Quaternion rotation = Quaternion.LookRotation(relativePos); transform.rotation = rotation; }
WSAD旋转,阻尼旋转
float smooth = 2.0f;
float tiltAngle = 30.0f;
void Update() { float tiltAroundZ = Input.GetAxis("Horizontal") * tiltAngle; float tiltAroundX = Input.GetAxis("Vertical") * tiltAngle; var target = Quaternion.Euler(tiltAroundX, 0, tiltAroundZ); // Dampen towards the target rotation //向target旋转阻尼 transform.rotation = Quaternion.Slerp(transform.rotation, target, Time.deltaTime * smooth); }
鼠标点着旋转1:
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; } }
鼠标点着旋转2:
void Update() { if (Input.GetMouseButtonDown(0)) { OnMouseDrag(); } } void OnMouseDrag() { this.transform.Rotate(new Vector3(Input.GetAxis("Mouse Y"), -Input.GetAxis("Mouse X"), 0) * 6f, Space.World); }
缩放的代码,缩放、自动旋转、拖拽物体
private bool onDrag = false; public float speed = 6f; private float tempSpeed; private float axisX; private float axisY; private float cXY; void OnMouseDown(){ axisX=0f; axisY=0f; } void OnMouseDrag () { onDrag = true; axisX = -Input.GetAxis ("Mouse X"); axisY = Input.GetAxis ("Mouse Y"); cXY = Mathf.Sqrt (axisX * axisX + axisY * axisY); if(cXY == 0f){ cXY=1f; } } float Rigid () { if (onDrag) { tempSpeed = speed; } else { if (tempSpeed > 0) { tempSpeed -= speed*2 * Time.deltaTime / cXY; } else { tempSpeed = 0; } } return tempSpeed; } void Update () { gameObject.transform.Rotate (new Vector3 (axisY, axisX, 0) * Rigid (), Space.World); if (!Input.GetMouseButton (0)) { onDrag = false; } }
using UnityEngine; using System.Collections; /** * @Function:使物体自动旋转,鼠标能够360°拖转物体,托转物体的时候,自动旋转停止,同时滚轮实现物体的缩放功能 * @Ahthor:黄杰 * @Date:2013-04-24 */ 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; } }