美文网首页
unity 拖动 旋转 惯性 放大 缩小

unity 拖动 旋转 惯性 放大 缩小

作者: Albert_d37d | 来源:发表于2020-07-14 11:33 被阅读0次

using System.Collections;

using System.Collections.Generic;

using UnityEngine;

using HedgehogTeam.EasyTouch;

public class DragRound : MonoBehaviour

{

    public Transform CenObj;//围绕的物体

    public float ratio = 1.0f;//放大缩小速率

    public float min_distance = 5.0f; //相机距物体最小距离

    public float max_distance = 10.0f;//相机距物体最大距离

    //滑动结束时的瞬时速度

    Vector3 Speed = Vector3.zero;

    //每帧偏差

    Vector3 offSet = Vector3.zero;

    //速率衰减值

    public float decelerationRate = 0.2f;

    private Vector3 Rotion_Transform;

    private new Camera camera;

    void Start()

    {

        camera = GetComponent<Camera>();

        Rotion_Transform = CenObj.position;

    }

    void Update()

    {

      // Ctrl_Cam_Move();

        Cam_Ctrl_Rotation();

    }

    private void Awake()

    {

        EasyTouch.On_PinchIn += OnPinchIn;

        EasyTouch.On_PinchOut += OnPinchOut;

    }

    private void OnPinchIn(Gesture g)

    {

        float temp = Time.deltaTime * g.deltaPinch + Camera.main.fieldOfView;

        temp = temp > 60 ? 60 : temp;

        Camera.main.fieldOfView = temp;

    }

    private void OnPinchOut(Gesture g)

    {

        float temp = Camera.main.fieldOfView - Time.deltaTime * g.deltaPinch;

        temp = temp < 10 ? 10 : temp;

        Camera.main.fieldOfView = temp;

    }

    private void OnDestroy()

    {

        EasyTouch.On_PinchIn -= OnPinchIn;

        EasyTouch.On_PinchOut -= OnPinchOut;

    }

    //镜头的远离和接近

    //public void Ctrl_Cam_Move()

    //{

    //    Vector3 mousePos = camera.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, 0.1f));

    //    if (Input.GetAxis("Mouse ScrollWheel") > 0 && Vector3.Distance(CenObj.position, camera.transform.position) > min_distance) //放大

    //    {

    //        camera.transform.position -= ratio * (camera.transform.position - mousePos);

    //    }

    //    if (Input.GetAxis("Mouse ScrollWheel") < 0 && Vector3.Distance(CenObj.position, camera.transform.position) < max_distance) //缩小

    //    {

    //        camera.transform.position += ratio * (camera.transform.position - mousePos);

    //    }

    //}

    //摄像机的旋转

    public void Cam_Ctrl_Rotation()

    {

        var mouse_x = Input.GetAxis("Mouse X");//获取鼠标X轴移动

        var mouse_y = -Input.GetAxis("Mouse Y");//获取鼠标Y轴移动

        if (Input.GetMouseButton(0))

        {

            offSet.x = mouse_x;

            offSet.y = mouse_y;

            //瞬时速度

            Speed = offSet / Time.deltaTime;

        }

        else

        {

            Speed *= Mathf.Pow(decelerationRate, Time.deltaTime);

            if (Mathf.Abs(Vector3.Magnitude(Speed)) < 1)

            {

                Speed = Vector3.zero;

            }

        }

        Move(Speed);

    }

    public void Move(Vector3 speed)

    {

        if (Vector3.Magnitude(speed) == 0)

        {

            return;

        }

        transform.RotateAround(Rotion_Transform, Vector3.up, speed.x * Time.deltaTime * 2.0f);

        transform.RotateAround(Rotion_Transform, transform.right, speed.y * Time.deltaTime * 2.0f);

    }

}

相关文章

网友评论

      本文标题:unity 拖动 旋转 惯性 放大 缩小

      本文链接:https://www.haomeiwen.com/subject/juuxhktx.html