zoukankan      html  css  js  c++  java
  • unity的旋转

    绕着一个点旋转 :

    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 : 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;
        }
    }
  • 相关阅读:
    《Linux权威指南》阅读笔记(3)
    adb命令篇 (转载)
    3.抓包神器Fiddler简介(转载)
    python-文件基本操作(一) (转载)
    python+requests实现接口测试
    python+requests实现接口测试
    12306登录爬虫 cookies版本
    爬虫3 requests之json 把json数据转化为字典
    爬虫3 requests基础之下载图片用content(二进制内容)
    爬虫3 requests基础之 乱码编码问题
  • 原文地址:https://www.cnblogs.com/martianzone/p/3323558.html
Copyright © 2011-2022 走看看