我一直面临一个问题,在使用拖射发射器。我以鼠标位置作为输入,并将其转换为世界坐标。这些世界坐标也被用来绘制一条线渲染器"lr“作为拖曳线,以显示目标的方向和力量。我遇到的问题是摄像机什么时候动。当相机移动时,启动点会从视野中消失,即使鼠标位置仍然保持不变,拖点也会随着摄像机的变化而变化。我希望开始点和拖曳点不受相机运动的影响,并且只应该是鼠标点击和保持的坐标。
我试过了
Camera.main.ScreenToWorldPoint(Input.mousePosition) - Camera.main.transform.position;
这解决了这个问题,但是行渲染器停止显示拖放线。
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
发布于 2022-10-12 12:18:58
如前所述,我可以想象的最简单的解决方案是将这些位置始终存储在持久的屏幕空间中。
然后转换到世界空间,以便将它们应用到行中。
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;
}https://stackoverflow.com/questions/73957498
复制相似问题