在全局坐标处创建Rect

时间:2015-05-11 18:23:42

标签: c# unity3d

我的场景是2048 x 1152,相机从不移动。当我使用以下内容创建一个矩形时:

timeBarRect = new Rect(220, 185, Screen.width / 3, Screen.height / 50);

它的位置根据游戏的分辨率而变化,所以我无法弄清楚如何让它始终落在我想要的屏幕上。为了澄清,如果我将分辨率设置为16:9并更改预览窗口的大小,游戏将以16:9的比例调整大小,但是条形图将从它应该的位置移出。

我有两个相关的问题:

  1. 是否可以将Rect放在全局坐标上?由于屏幕总是2048 x 1152,如果我可以将它放在某个坐标上,那就完美了。
  2. Rect是UI元素吗?当它被创建时,我无法在层次结构中找到它。如果它是一个UI元素,我觉得它应该相对于画布/相机创建,但我也想不出办法。
  3. 更新

    我现在意识到我不清楚实际上是什么形象。这是信息:一旦创建了Rect,我创建一个纹理,在Update()中更新该纹理的大小,并将其绘制到OnGui()中的Rect:

    timeTexture = new Texture2D (1, 1);
    timeTexture.SetPixel(0,0, Color.green);
    timeTexture.Apply();
    

    纹理大小发生了变化:

    void Update () 
        {
            if (time < timerMax) {
                playerCanAttack = false;
                time = time + (10 * Time.deltaTime);
            } else {
                time = timerMax;
                playerCanAttack = true;
            }
    

    Rect的实际可视化,根据屏幕大小在不同的位置绘制:

    void OnGUI(){ 
        float ratio = time / 500;
        float rectWidth = ratio * Screen.width / 1.6f;
        timeBarRect.width = rectWidth;
        GUI.DrawTexture (timeBarRect, timeTexture);
    }
    

1 个答案:

答案 0 :(得分:0)

我不知道我完全理解我提出的两个问题中的任何一个,但我确实发现无论什么分辨率没有使用全局坐标,使用相机的方法来获得矩形坐标以匹配屏幕的方式坐标,并将代码放在Update()中,以便更新rect的坐标:

timeBarRect.x = cam.pixelWidth / timerWidth;
timeBarRect.y = cam.pixelHeight / timerHeight;