obsidian/笔记文件/2.笔记/在游戏运行过程,实现拖曳和缩放_Render Mode是Screen Space模式下.md
2025-03-26 00:02:56 +08:00

2.5 KiB
Raw Blame History

#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

完成;