在游戏运行过程,实现拖曳和缩放_Render Mode是Screen Space模式下.md 2.5 KB

#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]]

完成;