今天在 使用 Ugui 的接口 IDragHandler 拖拽物体的发现一个严重的问题~~
如果Canvas 的RenderMode为OverLab的时候,可以轻松的使用
this.transform.position = eventdata.position;
去拖拽。。一切都正常,物体会跟随鼠标移动
但是当Ugui RenderMode为Camera的时候如果继续这样用的话你会发现 anchorPosition 里面的值会大的十分十分离谱~~而且位置也不准确。。
解决方案:
赋值前调用
Camera.main.ScreenToWorldPoint(eventData.position);
注意,该Camera 必须是渲染该Canvas的Camera,才可以。。
猜想:
在Mode = Overlab的时候没有任何问题原因 很明显就是因为,这时候的Cavans并不存在于世界坐标上,transform.position 操作的并非是世界坐标,而是屏幕坐标~,所以赋值的时候是没有任何问题的。
可是在Mode = Camera / WorldSpace 的时候,Canvas 被转换到了 世界坐标里面,底层的transform.position 也不在是屏幕坐标了,所以直接赋值是会出现问题。。。
使用Camera 的一个好处即是,3D 跟 2D的物体可以同时渲染在该摄像机上,而无需要先把3D物体放到一个 RenderTexture里面,而且,控制该3D物体的坐标,同样可以使用 SceenToWorld 去转换。。