首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用移动摄像机在unity2d中拖动和拍摄

用移动摄像机在unity2d中拖动和拍摄
EN

Stack Overflow用户
提问于 2022-10-05 08:07:38
回答 1查看 74关注 0票数 0

我一直面临一个问题,在使用拖射发射器。我以鼠标位置作为输入,并将其转换为世界坐标。这些世界坐标也被用来绘制一条线渲染器"lr“作为拖曳线,以显示目标的方向和力量。我遇到的问题是摄像机什么时候动。当相机移动时,启动点会从视野中消失,即使鼠标位置仍然保持不变,拖点也会随着摄像机的变化而变化。我希望开始点和拖曳点不受相机运动的影响,并且只应该是鼠标点击和保持的坐标。

我试过了

Camera.main.ScreenToWorldPoint(Input.mousePosition) - Camera.main.transform.position;

这解决了这个问题,但是行渲染器停止显示拖放线。

代码语言:javascript
复制
        if (Input.GetMouseButtonDown(0))
        {
            startPoint = Camera.main.ScreenToWorldPoint(Input.mousePosition);
            lr.positionCount = 1;
            lr.SetPosition(0, startPoint);

            Debug.Log(startPoint);
        }

        if (Input.GetMouseButton(0))
        {
            dragPoint = Camera.main.ScreenToWorldPoint(Input.mousePosition);
            lr.positionCount = 2;
            lr.SetPosition(1, dragPoint);
            
            Debug.Log(dragPoint);
        }

        if (Input.GetMouseButtonUp(0))
        {
            lr.positionCount = 0;
            endPoint = Camera.main.ScreenToWorldPoint(Input.mousePosition);
            //endPoint = Camera.main.ScreenToWorldPoint(Input.mousePosition) - Camera.main.transform.position;

            force = new Vector2(Mathf.Clamp(startPoint.x - endPoint.x, minPower.x, maxPower.x), Mathf.Clamp(startPoint.y - endPoint.y, minPower.y, maxPower.y));
            rb.AddForce(force * power, ForceMode2D.Impulse);
            //SoundManager.instance.PlaySfx(release);
            groundCheck = false;
            groundCheck2 = false;
        }

这是一个关于这个问题的视频:https://clipchamp.com/watch/RT28iA9Lgei

EN

回答 1

Stack Overflow用户

发布于 2022-10-12 12:18:58

如前所述,我可以想象的最简单的解决方案是将这些位置始终存储在持久的屏幕空间中。

然后转换到世界空间,以便将它们应用到行中。

代码语言:javascript
复制
if (Input.GetMouseButtonDown(0))
{
    startPoint = Input.mousePosition;
    lr.positionCount = 1;
    lr.SetPosition(0, Camera.main.ScreenToWorldPoint(startPoint));
}

if (Input.GetMouseButton(0))
{
    dragPoint = Input.mousePosition;
    lr.positionCount = 2;
    lr.SetPosition(0, Camera.main.ScreenToWorldPoint(startPoint);
    lr.SetPosition(1, Camera.main.ScreenToWorldPoint(dragPoint));
}

if (Input.GetMouseButtonUp(0))
{
    lr.positionCount = 0;
    endPoint = Input.mousePosition;

    var delta = Camera.main.ScreenToWorldPoint(startPoint) - Camera.main.ScreenToWorldPoint(endPoint);

    force = new Vector2(Mathf.Clamp(delta.x, minPower.x, maxPower.x), Mathf.Clamp(delta.y, minPower.y, maxPower.y));
    rb.AddForce(force * power, ForceMode2D.Impulse);
    //SoundManager.instance.PlaySfx(release);
    groundCheck = false;
    groundCheck2 = false;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73957498

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档