制作背包

在制作背包之前我们先整理一下思路,流程,功能

背包的组成:背包按钮、背包面板、背包空格、背面名字框、背包关闭按钮,背包中的游戏物品(不同的游戏物品)

背包功能:打开背包、关闭背包、放物品、显示物品数量、交换物品、整理、鼠标拖动背包整体移动

功能我们需要写代码来实现,那么要写出这些功能我们需要哪些知识点:

1、打开/关闭背包:

需要打开/关闭按钮组件,并且给按钮写脚本添加事件、动画(用DoTween插件),当点击打开按钮的时候,向前播放动画(从播放前的状态到播放后的状态);当点击关闭按钮的时候,向后播放动画(从播放后的状态到播放前的状态)

2、搭建基本背包结构:

首先创建一个背包名字框,需要一个图片组件,再创建一个文本组件用来显示背包名字;创建一个背包面板,用图片组件就可以;然后我们需要创建空格子,这里需要用到循环、克隆来创建多个空格子,把父物体设为背包面板,因为格子是背包面板的组成部分;给空格子的父物体添加Grid Layout Group(自动排列)组件,让空格子自动排列;添加一个文本显示物品数量,text设为0,否则会报空引用异常,把文本设为空格子的子物体,

3、添加物品:

添加物品就是把物品设为空格子的子物体,这里的物品我们用一个图片组件表示,设置它的大小和缩放,否则可能看不到,把它设为预设体,让它动态加载功能文件下Resources文件中的图片(把需要动态加载的图片拖到这里),否则会找不到动态加载的对象,会报空引用异常;我们需要遍历看空格子是否有子物体(遍历用Transform类型的集合,用来储存格子的位置,集合可以动态的扩容,不用担心溢出报错),如果有说明它有物品了,此时我们需要判断这个物体是否是要添加的物体,如果是则改变格子的的子物体文本,让它原来的数量加上现在的数量显示,如果不是则给格子添加物品,并显示数量;这里是否是同一个物品我们用名字判断,物品数量用数字接收,于是我们写一个方法,传入物品名字和物品数量

4、交换物品:

实际就是互换父物体,我们通过鼠标拖动物品,实现接口IBenginDragHandler,IDragHandler,IEndDragHandler,ICanvasRaycastFilter,

设置一个布尔类型的变量用来设置是否射线检测,放在射线检测方法中return它的值。 记录游戏物品的格子位置,将拖动的游戏物品置前,也就是把父物体设为画布,拖动的游戏物品忽略射线检测;拖动中游戏物品跟随鼠标位置移动;结束拖动时,得到鼠标后面的游戏对象(用形参.pointerCurrentRaycast.gameObject),判断是否检测到游戏对象,当检测到的是格子,成为格子子物体,当检测到的是其他游戏物品的时候,互换,更改所属的父物体,不是则复位;都判断完后重新开启射线检测。

5、鼠标拖动背包整体移动

实现接口IDradHandler,当拖动背包名字框时,让背包名字框的位置等于鼠标的位置,把背包面板设为背包名字框的子物体。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 之前完成了一个背包以及添加物品,但是物品并不具备“物品”所该有的功能,除开每个游戏所需的特定的效果之外,也缺乏基本...
    Wei_Boom阅读 14,301评论 14 23
  • 首先,导入NGUI插件 1、创建一个Sprite,创建一个空物体,也可以是图片,我这里创建的是空物体,2、创建一个...
    周joe阅读 3,558评论 0 0
  • 早上开车经过家门口的车站,看着站台上老老少少的人都在等公交车,不禁想起还是好多年前的事。 那一年为了道路施工,家门...
    在水一方含阅读 1,882评论 1 2
  • 八年后 昭德二十八年夏 恭昭帝发动四国大战,各国皆投入到战争中去,最终日耀国大败四国,恭昭帝成为一统天下的霸主。皇...
    浅若夏茉阅读 4,028评论 0 0
  • 一说起留守儿童,我们的刻板印象是在经济落后的偏远地区,父母常年外出务工,只能跟随祖辈生活的孩子。这些孩子从小生活上...
    陆七萌阅读 3,744评论 0 0

友情链接更多精彩内容