有没有办法检查矩形变换是否包含点?提前感谢。我尝试了Bounds.Contains()和RectTransformUtility.RectangleContainsScreenPoint(),但没有帮助
private bool AreCoordsWithinUiObject(Vector2 coords, GameObject gameObj)
{
Bounds bounds = gameObj.GetComponent<Renderer>().bounds;
return bounds.Contains(new Vector3(coords.x, coords.y, 0));
}
这样我会收到一个错误“There is no renderer attached to the object”,但我已经将CanvasRenderer附加到它了。
RectTransformUtility.RectangleContainsScreenPoint(gameObj.GetComponent<RectTransform>(), coords);
此方法始终返回false
if (AreCoordsWithinUiObject(point, lines[i]))
{
print("contains");
}
lines是游戏对象的列表
3条答案
按热度按时间wpx232ag1#
CanvasRenders没有
bounds
成员变量。但是,您的任务可以只使用RectTransform.rect成员变量来完成,因为我们可以通过这种方式获得矩形的宽度和高度。下面的脚本假设您的canvas元素锚定在Canvas的中心。当您的鼠标位于脚本所连接的元素内部时,它将打印“TRUE”。vhmi4jdf2#
您需要提供您的UI Camera作为RectTransformUtility.RectangleContainsScreenPoint的第三个参数,以使其正确工作
pu3pd22g3#
对于UI对象
container
,您可以只使用其rect的Contains
方法(带有本地位置):如果更喜欢使用世界位置,只需将其转换为局部空间: