unity拖拽物品遇到的bug及解决思路

记录一下拖拽实现过程中遇到的bug

RectTransform

专门用在UI中transform

判断点击是否在UI中

使用这个函数就可以判断点击的是否是UI面板,返回true表明在UI面板中

csharp 复制代码
EventSystem.current.IsPointerOverGameObject()

值得一提的是,如果发现了有UI穿透效果,看看自己项目
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);射线检测那一块,我在实现拖拽的时候就遇到了一个bug,就是点击ui结果可以移动,后面查了查资料才知道射线检测并不会发现点击是个UI面板就不可以点击地面,应该在检测射线的时候也检测一下是否为ui面板,是的话直接return了,不再有射线检测并且移动操作了。

offsetmax和offsetmin值

在拖拽的过程中,这两个值会被改变,offsetmax就是右上角的值,offsetmin就是左下角的值。当拖拽完成要将rectTransform改成原来的地方。而不是不管他。

就有了两个操作,向内偏移和向外扩展,看一下gpt的介绍

offsetmax就是右上角的值,也就是(right,top),offsetminx就是左下角的值(left,bottom),

上面图片举得是反例,max按正值算的。下面的代码才是正确的解决思路,左下角像上和向右五个单位。如果t.offsetMax = Vector2.one * 5;这么写,代表右上角像右和向上偏移5格,很显然这样是不对的,应该是向左边和向下5格,所以代码是负数的形式来标识。

csharp 复制代码
	RectTransform t = transform as RectTransform;
    t.offsetMax = -Vector2.one * 5;
    t.offsetMin = Vector2.one * 5;
相关推荐
游乐码4 小时前
Unity基础(十一 )资源同步加载
unity·游戏引擎
LONGZETECH5 小时前
汽车仿真教学软件技术实现深度解析:从三维建模到学情数据闭环
c语言·3d·unity·架构·汽车
游乐码6 小时前
unity基础(九)协程原理
unity·游戏引擎
hust_a8 小时前
利用AI定位BUG的体验
bug
winlife_9 小时前
全程用 AI 做一款商业级手游 · EP0 立项:能做到吗、怎么做、边界在哪
人工智能·unity·ai编程·游戏开发·商业化·mcp·funplay
nnsix9 小时前
Unity Texture2D的 Read/Write 选项
unity·游戏引擎
WiChP21 小时前
【V0.1B11】从零开始的2D游戏引擎开发之路
开发语言·游戏引擎
玖玥拾1 天前
Cocos学习笔记:武器系统与数据驱动UI联动
游戏引擎·cocos2d
winlife_1 天前
全程用 AI 做一款商业级手游 · EP1 地基:先搭框架层,不急着写玩法
unity·ai编程·游戏架构·mcp·框架设计·funplay
小贺儿开发1 天前
Unity VideoPlayer 播放控制器
unity·编辑器·播放器·视频·工具·videoplayer·互动