【发布时间】:2017-07-16 12:26:06
【问题描述】:
我正在编写一个函数来判断一个 2D 对象是否完全在另一个对象内部。 我通过获取对象的位置来做到这一点,然后使用这个位置和它的大小,计算对象的边缘位置,然后使用 Camera.main.pixelRect.Contains 进行检查。这是我当前的代码:
// get the center of the object
Vector2 pos = Camera.main.WorldToScreenPoint(card.transform.position);
// get the bounding box
var rect = image.transform.rect;
var topLeft = new Vector2(pos.x - (rect.width / 2), pos.y - (rect.height / 2);
return Camera.main.pixelRect.Contains(topLeft);
我的问题是,刚接触 Unity,测量结果不匹配。当对象按屏幕尺寸缩放时,我很困惑,我会得到图像的实际宽度,但它计算错误。
我还测试了 rect :
rect = GetComponent<RectTransform>().rect;
有人可以帮我解决这个问题吗?
Ps:如果有更好的方法来检查 2D 对象何时完全在另一个对象中,我也会接受。
【问题讨论】:
-
如果两个矩形接触,Rect#Overlap 将返回。如果点在矩形内,Rect#Contains 将返回。至于标量,总是将点转换为屏幕空间,或者永远不要这样做。不要混搭。如果转换层次结构都被奇怪地缩放,那么转换可能是最好的。