【问题标题】:Unity Camera vertically scrolling effectunity Camera 垂直滚动效果
【发布时间】:2021-06-13 01:28:05
【问题描述】:

我想创建一个像闲置矿工大亨一样的相机运动。因此,Camera 应该通过具有典型滚动效果的平移来垂直滚动。

这是我的代码:

    Vector3 touchStart;
    public int upperLimit = 0;
    public int lowerLimit = 7000;
 
    void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            touchStart = Camera.main.ScreenToWorldPoint(Input.mousePosition);
        }
 
        if (Input.GetMouseButton(0))
        {
            Vector3 direction = touchStart - Camera.main.ScreenToWorldPoint(Input.mousePosition);
            float finalYPos = Camera.main.transform.position.y + direction.y;
            finalYPos = Mathf.Clamp(finalYPos, lowerLimit, upperLimit);
            Camera.main.transform.position = new Vector3(Camera.main.transform.position.x, finalYPos, Camera.main.transform.position.z);
            Debug.Log(finalYPos);
        }
    }

但是我怎样才能使滚动用完。实际上,当我离开鼠标/重击时,运动会直接停止。

感谢您的帮助

最好的问候

【问题讨论】:

  • 是否要单击并拖动以设置滚动方向,然后释放鼠标按钮后让相机继续滚动?
  • 是的,完全正确。就像您在智能手机上滚动网站时一样。对不起我的英语不好。

标签: visual-studio unity3d scroll camera


【解决方案1】:

我为遇到相同问题的每个人找到了解决方案:

   [SerializeField]
private Camera cam;

Vector3 touchStart;
private float topLimit = 0f;
private float bottomLimit = -2000.0f;

private Vector3 _curPosition;
private Vector3 _velocity;
private bool _underInertia;
private float _time = 0.0f;
public float SmoothTime = 2;

public Vector3 direction;

void Update()
{
    PanCamera();

    if (_underInertia && _time <= SmoothTime)
    {
        cam.transform.position += _velocity;
        float newY = Mathf.Clamp(cam.transform.position.y, bottomLimit, topLimit);
        cam.transform.position = new Vector3(cam.transform.position.x, newY, cam.transform.position.z);

        _velocity = Vector3.Lerp(_velocity, Vector3.zero, _time);
        _time += Time.smoothDeltaTime;
    }
    else
    {
        _underInertia = false;
        _time = 0.0f;
    }
}


private void PanCamera()
{

    if (Input.GetMouseButtonDown(0))
    {
        touchStart = cam.ScreenToWorldPoint(Input.mousePosition);
        _underInertia = false;
    }

    if (Input.GetMouseButton(0))
    {
        Vector3 _prevPosition = _curPosition;

        direction = touchStart - cam.ScreenToWorldPoint(Input.mousePosition);
        float finalYPos = cam.transform.position.y + direction.y;
        Debug.Log("Old: " + finalYPos);
        finalYPos = Mathf.Clamp(finalYPos, bottomLimit, topLimit);
        Debug.Log("New: " + finalYPos);
        Vector3 desiredPosition = new Vector3(cam.transform.position.x, finalYPos, cam.transform.position.z);
        cam.transform.position = desiredPosition; 

        _curPosition = desiredPosition;
        _velocity = _curPosition - _prevPosition;

    }
    if (Input.GetMouseButtonUp(0))
    {
        _underInertia = true;

    }
}

【讨论】:

    猜你喜欢
    • 2020-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-12
    • 2017-07-04
    • 2021-11-13
    • 2023-03-09
    • 2021-02-22
    相关资源
    最近更新 更多