【发布时间】:2018-06-29 11:26:51
【问题描述】:
我在画布中有一个带有屏幕空间 - 相机渲染模式的图像 UI。我喜欢做的是通过循环遍历所有LineRenderer 位置并更改其y 轴,将我的LineRenderer 移动到图像垂直位置。我的问题是我无法获得LineRenderer 可以理解的图像的正确位置。我试过使用ViewportToWorldPoint 和ScreenToWorldPoint,但位置不同。
Vector3 val = Camera.main.ViewportToWorldPoint(new Vector3(image.transform.position.x, image.transform.position.y, Camera.main.nearClipPlane));
for (int i = 0; i < newListOfPoints.Count; i++)
{
line.SetPosition(i, new Vector3(newListOfPoints[i].x, val.y, newListOfPoints[i].z));
}
使用Vector3 val = Camera.main.ScreenToWorldPoint(new Vector3(image.transform.localPosition.x, image.transform.localPosition.y, -10));的截图结果
【问题讨论】:
-
您能添加一张您当前代码呈现方式的屏幕截图吗?在屏幕空间和世界空间之间进行匹配是一件棘手的事情,它有助于了解发生了什么。
-
打印出图像的屏幕空间位置如何?也许它不在你认为应该的位置。要尝试的另一件事是查看 (0, 0) 或 (100, 100) 转换为什么。
-
@YAC 真正的问题是覆盖画布对象使用与世界空间完全不同的坐标系......和视口空间。
-
@unice,如果您的问题解决了,请采纳答案,以便对其他人有用。
-
@Programmer,抱歉回复晚了。一直在测试脚本,它在 Canvas 中与渲染模式 Screen Space - Overlay 完美配合。但是当我使用 Screen Space - Camera 并将我的主相机拖到渲染相机时,linerenderer 的位置是不同的。但这足以回答我的问题,我现在将坚持覆盖。感谢 Draco18s 花费时间和精力回答我的问题 :)