滑动即可平滑更改对象的缩放比例

时间:2019-07-22 22:57:27

标签: c# unity3d

我编写了下面的代码,以通过鼠标滑动来更改对象的比例(X轴),它可以工作,但不平滑,如何平滑?

脚本:

Vector3 newScale;
private float _previousSwipePosition;
private float newPosition;

if (Input.GetMouseButton(0))
    {
        _previousSwipePosition = Input.mousePosition.x;

        if (newPosition != _previousSwipePosition)
        {
            if (newPosition - _previousSwipePosition < -2)
            {
                if (transform.localScale.x <= 1.4f)
                {
                    newScale = transform.localScale;
                    newScale.x += 0.06f;
                    transform.localScale = newScale;
                }
            }
            else if (newPosition - _previousSwipePosition > 2)
            {
                if (transform.localScale.x >= 0.2f)
                {
                    newScale = transform.localScale;
                    newScale.x -= 0.06f;
                    transform.localScale = newScale;
                }
            }
        }

        newPosition = Input.mousePosition.x;
    }

2 个答案:

答案 0 :(得分:0)

使用Time.deltaTime进行平滑

    Vector3 newScale;
    private float _previousSwipePosition;
    private float newPosition;
    private float speed = 6f;

    private void Update()
    {
        if (Input.GetKey(KeyCode.A))
        {
            if (transform.localScale.x <= 1.4f)
            {
                newScale = transform.localScale;
                newScale.x += speed * Time.deltaTime;
                transform.localScale = newScale;
            }
        }
        if (Input.GetKey(KeyCode.B))
        {
            if (transform.localScale.x >= 0.2f)
            {
                newScale = transform.localScale;
                newScale.x -= speed * Time.deltaTime;
                transform.localScale = newScale;
            }
        }
    }

答案 1 :(得分:0)

您可以使用Input.GetAxis("Mouse X")来平滑缩放鼠标在上一帧中移动了多少。将其乘以速度参数和Time.deltaTime,以将帧速率考虑在内。

通过该乘积获得2的幂,以获取改变当前比例的大小。然后,更改比例并将其夹紧:

public float scaleSpeed = 1f;

// ...

    // ignore first frame mouse is pressed
    if (Input.GetMouseButton(0) && !Input.GetMouseButtonDown(0))
    {
        float scaleFactor = Mathf.Pow(2f, Input.GetAxis("Mouse X") 
                                          * scaleSpeed 
                                          * Time.deltaTime);

        float newX = Mathf.Clamp(transform.localScale.x * scaleFactor, 0.2f, 1.4f);

        transform.localScale = new Vector3(
                newX, 
                transform.localScale.y, 
                transform.localScale.z);
    }