unity 相机惯性滑动

using UnityEngine;

using HedgehogTeam.EasyTouch;

public class TouchManager : MonoBehaviour

{

    //上次鼠标位置

    Vector2 prevMousePos = Vector3.zero;

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

    Vector3 Speed = Vector3.zero;

    //每帧偏差

    Vector3 offSet = Vector3.zero;

    //鼠标开始位置

    Vector3 startMousePosition = Vector3.zero;

    //速度衰減率

    public float decelerationRate = 0.1f;

    //摄像机

    public Camera m_camera;

    void Update()

    {

        HandleMouseInput();

    }

    private void HandleMouseInput()

    {       

        //按下时记录位置

        if (Input.GetMouseButtonDown(0))

        {

            prevMousePos = Input.mousePosition;

            startMousePosition = Input.mousePosition;

        }

        //移动时更新位置

        if (Input.GetMouseButton(0))

        {

            Vector3 curMousePosition = Input.mousePosition;  //当前鼠标的屏幕坐标系

            //偏差值

            offSet = m_camera.ScreenToWorldPoint(curMousePosition) - m_camera.ScreenToWorldPoint(prevMousePos);

            prevMousePos = curMousePosition;

            //瞬时速度

            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;

        }


        m_camera.transform.localPosition -= speed * Time.deltaTime;       

    }

}

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容