感谢大家继续观看鱼都会系列,上一次我们教会了鱼希尔排序,这一次,我们来使用NGUI做一个简单的移动格子模式的背包。
在开始制作背包之前,我们需要了解几个知识。
1、 怎么将精灵拖出来。
2、 释放鼠标我们会,但是怎么获取释放的位置的对象。
3、 如果获取了对象,我们只需要交换就可以了,但是怎么让他们对齐中心。
在提出3个问题之后,我们一个个来解决问题:
首先我们找到NGUI中找到案例:
你会发现是这样一个例子:
你可以拖动物体,然后将左边的装备丢到右边去,还能将装备放在石头上。
我们是不是可以从这个案例中获取几个问题的解决方法呢?
1、怎么将精灵拖出来。
这个问题可以在这里看到。
2、 释放鼠标我们会,但是怎么获取释放的位置的对象。
我们可以将装备放在左右两边,还可以放在石头上,那么我们就能够解决这个问题。
3、如果获取了对象,我们只需要交换就可以了,但是怎么让他们对齐中心。
当我们放置物体时,发现它是对齐的,这个问题能够解决。
解决问题1:
现在我们来解决第一个问题:
我们先创建一个容器,然后将精灵放入容器中,如下图:
然后给精灵添加碰撞体:右击精灵然后选择Attack->BoxCollider,这时候,我们发现精灵中有了一个碰撞体:
我们需要拖住精灵,就给精灵添加一个脚本UIDragDropItem,运行我们的程序,现在我们发现我们可以拖住物体了,可以将他放在任何位置。
但是我们需要的是拖动到格子中才会能够放置,如果是在其他地方就会回到原来的位置。所以我们需要一个组件:Grid;
在容器下添加一个Grid将精灵放入其中:选择导航NGUI->Create->Grid可以添加一个Grid物体,如下图:
这时启动游戏,就能够得到我们要的效果。
解决了第一个问题,我们再来看第二个问题。怎么放置物体;
2、 释放鼠标我们会,但是怎么获取释放的位置的对象。
先给我们的容器添加一张图片,选择容器,点击AddComponent,输入NGUISprite,添加一个组件,然后选择图集,再选择精灵。如果不会给空物体添加精灵,请查看其他文章。
在添加之后我们得到这样一个效果:
容器中的组件如下:
好的,我们完成了一个格子和一个物品。现在我们复制一份我们的这组对象;并删除其中一组对象中的物品的精灵,构成如下图:
运行游戏后,我们发现我们是无法将装备放入空着的格子的。
我们需要给左边的容器添加一个碰撞体:Attack->BoxCollider,然后添加一个脚本UIDragDropContainer,最后如下图:
其中ReparentTarget是放置的目标,我们要将这个精灵传到这个容器中触发他,但是要将他指定放入其他地方,我们将他放入容器下的Grid中所以设置如图:
运行游戏,我们发现我们可以将右边的物体放入左边了。
但是我们无法将放入左边的装备拖动,这是因为左边容器的深度(Depth)和装备的深度(Depth)一样,而且都有碰撞体,容器将装备挡住了,这时我们设置容器的深度为0:
这样我们就又可以将放入左边的装备拖出来了。但是我们不能将他放回右边的容器,这是因为我们右边的容器缺少碰撞体和UIDragDropContainer组件,给右边添加上碰撞体和UIDragDropContainer之后,将容器深度设为0,这是左右互相放置就没问题了。
这次就到这里,下次我们解决第三个问题,完成简单背包的制作。鱼都会的背包,你也会~