为什么要写这篇博客呢,因为网上没有相关的一些技术指导,或者是我的搜索方法不对找不到相关的一些方法,所以想把自己的想法记录下来,方便日后使用。
格子吸附功能适用:背包和摆放功能
先说背包,如果一个背包的格子有吸附作用的话,只要我们把一件物品摆放到格子的附近,就能自动调整到格子里面了。
实现方法:每个格子都是一个UI,都有自己的一个锚点,我们必须记录下锚点的位置,通过遍历各个格子锚点计算出与物品位置距离最少的,就把物品的位置调整到格子锚点的位置即可。同时在这过程中,我们还要实现物品的拖拽和鼠标的对应,而松开鼠标之后才实现调整的操作,这里用到是unity的EventTrigger事件。
再说摆放类游戏,为什么要把这两者分开,因为摆放功能的物品一般不是单个格子,而背包一般都是单个的。
实现方法:
目前想到可行的两种方法
第一种方法:与背包一样,用锚点吸引,但是这个需要我们调整物品的锚点位置,一般有摆放功能的物品都是按照格子的大小定制的,比如说一个长方形它占据两个格子,但是物品的锚点一般在中心点,而格子的锚点也在中心,就用长方形来说,如果我们不做处理的话,长方形的锚点应该是落在格子的边上,而我们的想法是锚点吸附,如果这样做就会导致长方形不完整占据格子。对此我们应该把长方形的锚点设置到长方形中的其中一个正方形锚点上(分解成两个格子的正方形),再重复我们背包的实现方法即可。(我一开始只是想着用什么算法去处理不规则的图形,并没有想到去移动锚点,这也算是我踩的一个坑)
第二种方法:用线条来代替格子,把格子分解成了很多条横竖的线条。计算物体锚点(或者边)到线条的直线距离,选择最近的两条线条进行吸附。这个方法我还没有进行实验,但是明显这个比上面的方法实现难度较高,但是它的一个可复用性也比第一种方法好,而且不用重复处理锚点。但是对于一些奇形怪状的物品,并不清楚它锚点在哪的时候,就不能用这个方法了。
我在很多的unity群询问过,但是并没有得到一个满意的回答,希望看到这篇文章的大佬能给自己指明一个正确方向,其实我觉得这两种方法都很接近正确答案了,还是觉得有更好的。