我必须使用" 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)
答案 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并且它可以正常工作