背包系统
背包系统是大多数游戏中必不可少的功能,看了一些教程中的背包系统逻辑和UI表现联系太过于紧密,而且背包数据存档不方便,这两天闲来无事,就想自己尝试一下实现一个逻辑与表现分离并且数据出来进行存档的背包系统,完成的效果如下,虽然还是有很多的缺陷,但是基本功能也算实现了
代码实现思路:
由滚动区域的horizontalNormalizedPosition控制位置,当滚动位于最左边时horizontalNormalizedPosition == 0,而位于最右边时为horizontalNormalizedPosition == 1。
计算背包页数
计算存储每一页horizontalNormalizedPosition的值
比较当前存储的值与释放(停止拖动)时的大小判断为左拖动还是右拖动
计算处与停止拖动时 horizontalNormalizedPosition距离最近的值,通过Update lerp取值,把horizontalNormalizedPosition设置为最近的值
代码
public class KnapsackPage : MonoBehaviour, IBeginDragHandler, IEndDragHandler
{
public static KnapsackPage _instance;
public ScrollRect rect;
public Text pageInfo;
public float[] index;
public float smooth = 5.0f;
public Transform[] boxes;
public GameObject itemPref;
private RectTransform view, content;
private bool isDrag;
private int pageIndex = 0;
void Awake()
{
_instance = this;
}
void Start()
{
//计算页数以及对应的 horizontalNormalizedPosition 值
view = this.transform.Find("View").GetComponent<RectTransform>();
content = this.transform.Find("View/Content").GetComponent<RectTransform>();
float pages = content.childCount / 20.0f;
float step = 1.0f / (pages - 1);
index = new float[(int)(pages)];
index[0] = 0