Unity 拖动惯性效果

作者: ysl176 | 来源:发表于2018-01-31 09:42 被阅读164次

    缓冲时间可以自己调
    using UnityEngine;
    using System.Collections;

    public class Drag : MonoBehaviour
    {
    private Vector3 _screenPoint;
    private Vector3 _offset;
    private Vector3 _curScreenPoint;
    private Vector3 _curPosition;
    private Vector3 _velocity;
    private bool _underInertia;
    private float _time = 0.0f;
    public float SmoothTime;

    void Update()
    {
    if(_underInertia && _time <= SmoothTime)
    {
    transform.position += _velocity;
    _velocity = Vector3.Lerp(_velocity, Vector3.zero, _time);
    _time += Time.smoothDeltaTime;
    }
    else
    {
    _underInertia = false;
    _time = 0.0f;
    }
    }
    void OnMouseDown()
    {
    _screenPoint = Camera.main.WorldToScreenPoint(gameObject.transform.position);
    _offset = gameObject.transform.position - Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, _screenPoint.z));
    //Screen.showCursor = false;
    _underInertia = false;
    }
    void OnMouseDrag()
    {
    Vector3 _prevPosition = _curPosition;
    _curScreenPoint = new Vector3(Input.mousePosition.x, Input.mousePosition.y, _screenPoint.z);
    _curPosition = Camera.main.ScreenToWorldPoint(_curScreenPoint) + _offset;
    _velocity = _curPosition - _prevPosition;
    transform.position = _curPosition;
    }
    void OnMouseUp()
    {
    _underInertia = true;
    //Screen.showCursor = true;
    }
    }

    相关文章

      网友评论

        本文标题:Unity 拖动惯性效果

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