3D游戏编程与设计作业九

背包系统

进入 NGUI 官方网站,使用 UGUI 实现 Inventory 背包系统

UGUI 优势
  1. 所见即所得(WYSIWYG)
  2. 设计工具支持多模式、多摄像机渲染
  3. 面向对象的编程
UGUI 基础

1、UI元素的显示顺序画布中的UI元素按照它们在层次结构中出现的顺序绘制。如果两个UI元素重叠,后面的元素将出现在较早的元素之上。因此,最后一个孩子显示在最上面。要更改哪些元素出现在其他元素的顶部,通过拖动它们在 Hierarchy 视图中的位置。这顺序也可以通过 Transform 组件的方法在脚本中控制。 如:SetAsFirstSibling,SetAsLastSibling 和SetSiblingIndex。
2、渲染模式画布组件有渲染模式(Render Mode)设置,可用于使其在屏幕空间(Screen Space)或世界空间(World Space)中渲染。

设计过程

首先切换到2D模式,然后新建Canvas对象background作为背景,为了加上背景图,新建一个Image组件。UGUI用到的图片是Sprite类型的,导入的所有图片都要改成Sprite类型。,如下:
在这里插入图片描述
总背景图如下:
在这里插入图片描述
在总背景图下添加两个Image对象left、right分别作为左右背包背景,背包背景图如下:
在这里插入图片描述
为了便于布局,加上Grid Layout Group组件。在背包背景下新建一些Image对象cell作为背包放置装备的格子,标签设置为cell。背包格子背景图如下:
在这里插入图片描述
虽然原图不太符合我们的预期,但可以通过对网格大小的调整来使其变为正方形。
最后是装备模型,由于太多就不一一贴图了。

最后,总的布局结构如图展示:在这里插入图片描述
左右背包的结构基本一致,所以上图就没有展开。
接下来就是代码部分了,背包系统一般情况需要构建三个板块,一存储的物品信息,二物品之间如何操作,三用户界面的搭建。因为在这里我要实现的背包系统比较简单,所以主要实现的就是第二点操作问题,具体一点就是使装备可以点击拖动放下,即实现EventSystems的IDragHandler,IPointerDownHandler,IPointerUpHandler这三个接口对应的方法。
拖动和点击缩小比较容易实现,如下:在这里插入图片描述
在OnPointerDown函数中,有一行代码是transform.GetComponent ().blocksRaycasts = false;
这是因为在OnPointerUp函数中当鼠标松开时需要判断所处位置时,通过射线获得下一层该位置的对象,而射线被物品本身挡到,所以要先设置自身 Canvas Groupd 的 Blocks Raycasts 为false,让 event trigger 忽略自身,才可以让 event trigger 检测到它下面一层的对象。这样,才能实现鼠标拖拽装备的成功放下,同时还要将自身 Canvas Groupd 的 Blocks Raycasts 重置为true。实现代码如下:
在这里插入图片描述
演示视频
代码传送门

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值