unity:背包j讲解(个人篇)

本文介绍了如何在Unity中实现一个逻辑与UI分离、支持数据存档的背包系统,包括物品拖动、格子控制等核心功能。通过滚动区域的horizontalNormalizedPosition控制,实现分页和拖动效果,代码实现思路清晰。
摘要由CSDN通过智能技术生成

背包系统

背包系统是大多数游戏中必不可少的功能,看了一些教程中的背包系统逻辑和UI表现联系太过于紧密,而且背包数据存档不方便,这两天闲来无事,就想自己尝试一下实现一个逻辑与表现分离并且数据出来进行存档的背包系统,完成的效果如下,虽然还是有很多的缺陷,但是基本功能也算实现了](https://img-blog.csdnimg.cn/20210128211324233.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl81MDY0Mjg5Nw==,size_16,color_FFFFFF,t_70)

在这里插入图片描述
在这里插入图片描述

代码实现思路:

由滚动区域的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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值