我是Unity的新手,我无法弄清楚如何获得3D GameObject
相对于相机或画布的位置。
我知道Camera.main.ScreenPointToRay(target)
可用于获取GameObject
的位置。有没有办法在相机视图或画布上获得GameObject
的位置?
我已经通过
制定了替代解决方案将图像移出画布。
创建位于目标3D GameObject
上的盲图像。
但我不喜欢两者。
答案 0 :(得分:1)
我最近花了一些时间来解决这个问题。我的目的是在3D世界对象上放置一个2D箭头,并使用Camera.WorldToViewportPoint()
和RectTransform.anchorMin/Max
找到最佳解决方案。
请注意,视点是规范化的(0.0 - 1.0
),而不是绝对像素位置:
Vector3 screenPos = Camera.main.WorldToViewportPoint(someObject.transform.position);
arrowImage.rectTransform.anchorMin = screenPos;
arrowImage.rectTransform.anchorMax = screenPos;
答案 1 :(得分:0)
如果您想将游戏对象的位置投影到画布上,请使用以下代码:
var pos = gameObject.transform.position;
var vec2 = RectTransformUtility.WorldToScreenPoint(camera, pos);
Debug.Log(vec2);
在另一种情况下,如果您想获取UI游戏对象的屏幕坐标,请尝试以下:
public static List<Vector2> GetScreenCoordinateOfUIRect(RectTransform rt)
{
Vector3[] corners = new Vector3[4];
rt.GetWorldCorners(corners);
var output = new List<Vector2>();
foreach (Vector3 item in corners)
{
var pos = RectTransformUtility.WorldToScreenPoint(null, item);
output.Add(pos);
}
return output;
}
通过这种方式,您可以获得UI游戏对象(具有RectTransform组件的人)的屏幕点,左下角为原点。请注意,此屏幕点与锚点无关,在所有锚点设置中,此功能都有效!