首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将世界位置设置为屏幕空间-相机画布的画布位置

将世界位置设置为屏幕空间-相机画布的画布位置
EN

Stack Overflow用户
提问于 2017-06-07 04:46:27
回答 4查看 9.8K关注 0票数 0

当我自由移动相机时,我正试图在Unity UI中的立方体上显示文本。画布设置为Screen Space - Camera模式,我在检查器中设置了camera属性。我还附加了一个鼠标移动脚本到相机。

我的问题是,文本几乎没有移动,似乎忽略了立方体相对于相机视口的位置。下面是我的代码:

代码语言:javascript
复制
public class UpdateUiMarker : MonoBehaviour {

    public RectTransform element;
    public Transform cube;

    public RectTransform canvas;

    // Update is called once per frame
    void LateUpdate () {
        Vector2 screenPos = Camera.main.WorldToScreenPoint(cube.position);
        Vector2 localPos;
        RectTransformUtility.ScreenPointToLocalPointInRectangle(canvas, screenPos, Camera.main, out localPos);
        element.localPosition = localPos;
    }
}
EN

回答 4

Stack Overflow用户

发布于 2019-05-24 19:54:54

首先,您可以让world相机查看填充为3D对象的cube,然后其他Camera ui在剔除3D对象时查看您的UI元素。最后,canvas画布放置您的UI元素。然后,您可以像这样编写代码:

代码语言:javascript
复制
var screen = world.WorldToScreenPoint(cube.transform.position);
screen.z = (canvas.transform.position - ui.transform.position).magnitude;
var position = ui.ScreenToWorldPoint(screen);
element.position = position; // element is the Text show in the UI.
票数 3
EN

Stack Overflow用户

发布于 2021-08-09 07:26:27

URP的工作解决方案(也适用于deffered):

代码语言:javascript
复制
    public static Vector2 WorldPositionToScreenSpaceCameraPosition(Camera worldCamera, Canvas canvas, Vector3 position)
    {
        Vector2 viewport = worldCamera.WorldToViewportPoint(position);
        Ray canvasRay = canvas.worldCamera.ViewportPointToRay(viewport);
        return canvasRay.GetPoint(canvas.planeDistance);
    }
票数 0
EN

Stack Overflow用户

发布于 2021-09-22 21:33:39

uscq answer对我很有效。然而,我需要知道在我的画布中的UI Image的世界位置。我的画布使用的是屏幕空间-相机,而不是覆盖。我修改了uscq answer来做相反的事情。非常感谢!

代码语言:javascript
复制
    var position = UICamera.WorldToScreenPoint(MyUIObject.transform.position);
    position.z = (thisCanvas.transform.position - UICamera.transform.position).magnitude;
    theLocationOfUIObjectInWorldLocation = Camera.main.ScreenToWorldPoint(position);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44399551

复制
相关文章

相似问题

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