#unity/日常积累
之前的方法,是canvas是ScreenSpaceOverlay的模式下,进行的计算操作;
![[Pasted image 20220426001920.png]]
之前的方法,没适用于Render Mode是Camera的模式;
![[Pasted image 20220426002040.png]]
如果是camera模式的话,需要再处理一下,换算的关系;
这个改版的工程,是有继承自,鼠标点击的;
![[Pasted image 20220426095957.png]]
还是跟之前的方法一样的,先定义一个方向的枚举;
![[Pasted image 20220426095042.png]]
然后,设置一个最小参数范围,还有rect的组件,是否拖曳,方向默认为无,最终位置,偏移值等; 这个的拖曳,跟上一个不太一样的地方在于,它只拖曳标题;
![[Pasted image 20220426095134.png]]
这个的修改,是在鼠标点击的时候,它会修改层级关系,确保transform是在最外层
![[Pasted image 20220426100019.png]]
这是画布;
![[Pasted image 20220426100139.png]]
然后这里的画布和rect获取,就简单明了很多;
![[Pasted image 20220426100654.png]]
这个改版是只能拖曳标题,所以写一个检测方法,检测鼠标按键,是否在标题的rect内;
![[Pasted image 20220426100748.png]]
如果鼠标框是在标题内,标识设为true,然后设置一下偏移;
![[Pasted image 20220426103808.png]]
然后, 调用接口,获取到屏幕点的世界坐标;
![[Pasted image 20220426104031.png]]
然后,也是用trans的世界坐标,也就是position,减去偏移值; 这就是拖曳标题移动;
![[Pasted image 20220426104208.png]]
然后,检测方向的那些接口,都是同理; 拖曳的话,如果不是标题框,也是同理,调用拖曳修改预制体宽高的FloatingWindow()函数;
![[Pasted image 20220426104514.png]]
这个FloatingWindow()函数,前面都是一样的; 修改宽高的操作,是不变的,主要是位置的修改;
![[Pasted image 20220426104759.png]]
修改完宽高之后,判断一下canvas画布的renderMode,如果是ScreenSpaceCamera的话,就先基于rect的世界坐标,获得它的屏幕坐标;
![[Pasted image 20220426104856.png]]
这是获得屏幕坐标的方法;
![[Pasted image 20220426105203.png]]
获得屏幕坐标之后,将屏幕坐标,加上前面的x和y的屏幕偏移,作为传参;
![[Pasted image 20220426105228.png]]
转成世界坐标;
![[Pasted image 20220426105336.png]]
将转换后的世界坐标,赋值给rect即可;
![[Pasted image 20220426105407.png]]
完成;