unity的旋转

 

绕着一个点旋转 :

transform.RotateAround(Vector3.zero, Vector3.up, speed* Time.deltaTime ); 

第一个参数,点的位置。第二个参数,法线方向,第三个参数,速度.如图时针旋转。

unity的旋转

 

 


旋转固定角度

 gameObject.transform.rotation = Quaternion.Slerp(gameObject.transform.rotation, Quaternion.Euler(60,0, 0), 6);

第一个参数起始角度,第二参数结束角度,第三个参数旋转工消耗的时间。


 

static function LookRotation (forward : Vector3upwards : 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;

    }

}

 

你可能感兴趣的:(unity)