使用GUI.DrawTexture在完全是gameobject的位置Unity上绘制一个Rect

时间:2016-07-22 17:29:52

标签: unity3d unity5 rect gameobject

我必须使用" GUI.DrawTexture(新的Rect ..."函数在我的屏幕上绘制一个矩形(实际上,它是我从{{3获得的渐变GUI栏)但是在内心深处它只是一个矩形)。我想在我屏幕上的游戏对象旁边做。

问题是:看起来矩形的坐标与游戏对象坐标不同(我在线搜索过,我猜它是真的)。我已经尝试过以下功能将游戏对象的位置转换为矩形的坐标,但仍然没有运气:

Vector3 gameObjectsPosition = Camera.main.WorldToScreenPoint(gameObject);

我最好的打击是当我这样做的时候:

GUI.DrawTexture(new Rect(gameObjectsPosition.x, Screen.height - gameObjectsPosition.y, Background.width * ScaleSize, Background.height * ScaleSize), Background);

然后,当我想绘制矩形时,我做了:

{{1}}

但是,Rect仍然不在游戏对象的确切位置。它的x是正确的,但是当我在互联网上搜索时,他们说我只需要做" Screen.height - gameObjectsPosition.y"在绘制Rect时。它对我没有用,但仍然是错误的。

如何在屏幕上的当前游戏对象旁边创建一个类似的矩形(例如,如果游戏对象的位置为x = -401且y = -80,我想要它在y = -80和x = -300)

1 个答案:

答案 0 :(得分:0)

您需要使用Screen.height代替 Screen.currentResolution.height

using UnityEngine;
using System.Collections;
public class GuiPosition : MonoBehaviour 
{

    public Vector2 WorldToGuiPoint(Vector3 GOposition)
    {
        var guiPosition = Camera.main.WorldToScreenPoint(GOposition);
        // Y axis coordinate in screen is reversed relative to world Y coordinate
        guiPosition.y = Screen.height - guiPosition.y;

        return guiPosition;
    }

    void OnGUI() 
    {
        var guiPosition = WorldToGuiPoint(gameObject.transform.position);
        var rect = new Rect(guiPosition, new Vector2(200, 70));
        GUI.Label(rect, "TEST");
    }
}

我刚测试将MonoBehaviour附加到Cube GameObject并且它可以正常工作