【发布时间】:2018-05-14 06:06:17
【问题描述】:
我有一个滚动视图,在它的内容对象中有一个 GridLayoutGroup 组件(内容对象有自己的位置和比例,而不是 (0,0,0) 或 (1,1,1) ),在它下面'是几个图像。在运行时,我想取出一个图像并将其父级设置为其他 UI 对象,但我希望图像保持其在屏幕上的位置。
但是我尝试了以下所有方法,最终都在屏幕上出现错误的位置(图像有时甚至移出屏幕)。
1 在图像对象上使用 SetParent 方法(尝试 True 或 false 作为第二个参数):
imageObject.transform.SetParent(otherObj, True);
2 在第一种方式中使用SetParent方法,然后手动给图像一个位置,但是id没有出现在鼠标位置(此代码适用于不在布局组中的其他对象):
imageObject.transform.SetParent(otherObj, True);
var p = Camera.main.ScreenToWorldPoint(Input.mousePosition);
imageObject.transform.position = new Vector3(p.x, p.y, 0);
3 调用 SetParent 后将位置设置为原始值。
var p = imageObject.transform.position;
imageObject.transform.SetParent(otherObj, True);
imageObject.transform.position = new Vector3(p.x, p.y, 0);
4 不使用任何代码,但在编辑器运行时,手动将图像拖出到目标父对象。它的位置仍然改变。
5 不要使用任何代码,但在编辑器运行时,手动取消选中 GridLayoutGroup 以禁用它。仍然改变图像位置。
为什么第三种方法不起作用?我认为可能未使用图像对象的 transform.position ,因此未使用该值,因此该值不在屏幕上的位置,或者在帧末尾发生了某些事情,因此我对位置的重置是无用的。
更多信息:我的画布渲染模式设置为“屏幕空间相机”。但即使将其更改为覆盖,它仍然是相同的结果。画布缩放模式为“Scale with Screen Size”,屏幕匹配模式为“Expand”。
那么我应该怎么做才能从 GridLayoutGroup 中取出图像但让它留在屏幕上的位置?谢谢!
【问题讨论】:
-
我认为在示例 3 中,您应该在设置父对象之前存储位置。
-
@obywan 感谢您的回复。这里是一个错误,只是编辑它。我在代码中做对了。