放置场景对象以获取UI元素

时间:2017-08-26 12:21:38

标签: c# unity3d

我的场景天空中有一个物体,无论屏幕比例如何,都希望防止它从视野中被切除。所以我在它上面设置了一个画布和一个 PlaceHolder RectTransform,作为UI元素 - 根据屏幕宽高比进行缩放和重新定位。我的目标是使用此位置通过使用以下脚本确定放置场景对象的位置:

Camera mainCam;
RectTransform placeHolder;
private void Start()
{
    mainCam = GameObject.FindGameObjectWithTag("MainCamera")
        .GetComponent<Camera>();
    placeHolder = GameObject.FindGameObjectWithTag("SkyObjectPlaceholder")
        .GetComponent<RectTransform>();
    var screenPos = mainCam.ScreenToWorldPoint(
        new Vector3(placeHolder.rect.x, placeHolder.rect.y, 0));
    transform.position = new Vector3(screenPos.x, screenPos.y,
         transform.position.z);
}

问题是我的天空物体始终位于屏幕中央。它不是现场任何东西的孩子,我只是把它放在那里。占位符位于画布的右上角。请注意,我尝试使用UI元素的锚点,将其设置为左下角,右上角,无变化,场景对象始终位于屏幕的中心。

我做错了什么?如何使Scene元素匹配Canvas元素的位置,以便它紧跟在它后面?

注意:我正在使用透视相机。我不知道这是否重要,但我想我提到它,以防万一。

又一个编辑:在稍微讨论了这个问题之后,我发现这个问题可能与我给Z的{​​{1}}输入有关,在我的情况下它是0.我无法'但是要获得可行的Z输入。

1 个答案:

答案 0 :(得分:-1)

嗯...我认为你应该改变那个对象的排序层