制作背包

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

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

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

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

1、打开/关闭背包:

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

2、搭建基本背包结构:

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

3、添加物品:

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

4、交换物品:

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

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

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

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

你可能感兴趣的:(制作背包)