关于坐标转化出现偏差的问题
member和singleMember是同一个组件,list和single有共同的父级root,member是list中的元素,根据list会自动排列位置,现在想把singleMember的位置设置的和list中的某个元素一样的位置,但是坐标转化后总是出现偏移。而且偏移的值随着list中的元素个数变化重排后会出现变化。
方式一:得到member相对于父级的相对位置,再把这个值设置给member
底下是编辑器中的设置
补充说明:
大概发现了问题出在哪里,观察了一下unity中物体的坐标,发现位置确实两个物体是一样的,但是他们的子集发生了偏移,猜想可能和list重排有关。
这里面内外两个组件,坐标是正确的,所以设置位置的代码是正确的,但是我观察他们的子物体,位置都发生了相同的偏移。
这是list在重排前和重排后内外两个组件的子物体位置(GObject的position属性)的变化。
方式一:得到member相对于父级的相对位置,再把这个值设置给member
Vector2 pos = member.TransformPoint(Vector2.zero, root) //root是list和外面的单一元素共同共同父级方式二:得到member的屏幕坐标,然后转逻辑坐标,再把位置设置给singleMember。
singleMember.SetXY(pos.x, pos.y);
Vecter2 pos = member.LocalToGlobal(Vector2.zero)两种方式都不能得到正确的位置,总会出现偏差
Vecter2 logicPos = GRoot.inst.GlobalToLocal(pos);
singleMember.SetXY(logicPos.x, logicPos.y);
底下是编辑器中的设置
补充说明:
大概发现了问题出在哪里,观察了一下unity中物体的坐标,发现位置确实两个物体是一样的,但是他们的子集发生了偏移,猜想可能和list重排有关。
这里面内外两个组件,坐标是正确的,所以设置位置的代码是正确的,但是我观察他们的子物体,位置都发生了相同的偏移。
这是list在重排前和重排后内外两个组件的子物体位置(GObject的position属性)的变化。
没有找到相关结果
已邀请:
2 个回复
谷主
赞同来自:
至于为什么得不到正确,要自己debug,光凭这样描述不知道你还做了什么。另外,root是GObject的属性,不要混淆。
谷主
赞同来自: