RPG背包系统【1】

转载自:http://www.unitymanual.com/blog-10192-2705.html

在RPG游戏中,我们猪脚不断的打钱爆装备,那么这些物品需要存储在哪里?

所以我们今天来学习制作背包,这样猪脚打到的东西就不会丢啦!
按照往常惯例,先贴一张图:

这个是地下城与勇士的背包界面,主要是我刚好找到了这张图,就暂时用这张。

我会在最后上传我的资源,你们可以下载下来跟着我一起来制作!

ok,首先创建inventory背景图,也就是Image,调到合适大小

然后保存为prefab,再来制作slot,这里我们先创建image,再吧image和canvas renderer组件删了,只留下rect transform

然后创建子物体Image,命名为ItemIcon,Image先选择再创建子物体button,也是选择这张图,在button里面吧sprite swap的高亮sprite换成 命名为Overlay,主要是鼠标移动显示高亮,再创建text,,命名为count,主要保存数目。

OK,我们也保存为prefab。

接下来我们来编写Inventory,c#代码:

首先定义变量:

接下来我们编写初始化Inventory,也就是在其中加入slot,我们写进一个方法CreatInentory(),在start中调用。

调整数值,运行就可以看到

这里注意一下:有的小伙伴永远也对不齐,因为image的锚点和轴没设置对,这里我自己是都定义在左上角。

Ok,界面部分大部分完成了,接下我们来写Item类。

这里我为了偷懒只写了两种类型的Item。

Ok,为了测试更加直观我搭建了一个场景:

绿色的是我们猪脚,当移动到蓝色物体

Inventory会增加一瓶蓝药,当移动到红色,会增加一瓶红药。

Ok,接下来我们编写Slot类,主要存放和处理Item。因为每一个slot都有一个或多个Item,也可以是没有。

[code]csharpcode:

using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using UnityEngine.UI;
public class Slot : MonoBehaviour {
	private Stack<Item> items;//这里我们用stack来存放进出Item
	public Text count;//数量
	public Sprite icon;//图标
	public bool isEmpty//是否为空
	{
		get{return items.Count == 0;}
	}
	// Use this for initialization
	void Start () {
		items = new Stack<Item>();
	}
	
	// Update is called once per frame
	void Update () {
	
	}
	public void AddItem(Item item)
	{
		items.Push(item);//吧tiem压入栈中
		if (items.Count > 1)
		{
			count.text = items.Count.ToString();//如果数量大于1就显示
		}
		ChangeIcon(item.icon);
	}
	private void ChangeIcon(Sprite iconSprite)
	{
		icon = iconSprite;
	}
}

然后我么回到Invetory代码,我们重新写个AddItem()方法,因为在这里可以遍历所有slots,好操作。

[code]csharpcode:

private int emptySlot;//空slot的数量

在start()初始化

[code]csharpcode:

emptySlot = rows * column;

[code]csharpcode:

public bool AddItem(Item item)
	{
		if (item.maxSize == 1)//先假设maxSize = 1
		{
			PlaceEmptySlot(item);
			return true;
		}
		return false;
	}
	private bool PlaceEmptySlot(Item item)
	{
		if(emptySlot > 0)
		{
			foreach(GameObject slot in allSlots)
			{
				Slot slotTemp = slot.GetComponent<Slot>();
				if (slotTemp.isEmpty)
				{
					slotTemp.AddItem(item);
					emptySlot--;
					return true;
				}
			}
		}
		return false;
	}

OK,我们接下来把我们的猪脚给移动起来,写个Player类,然后给Mana,Health的Perfab改新加的tag “Item”,注意maxSize 必须要为1,还有要设成trigger,Player要添加rigidbody

运行试试,发现移动到篮球和红球,在inventory有Item了。

OK,今天就先到这里!好累!!!

至于资源貌似我不会弄!!!=_=


  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Unity背包系统是一个游戏中常用的组件,用于管理玩家在游戏中所获得的道具。一个完整的背包系统通常由数据、逻辑和UI三部分组成。在设计过程中,我们首先进行UI设计,包括背包的标题、关闭键和背包内的格子容器。 背包系统的数据部分主要负责管理物品的信息,例如物品的名称、图片、数量等。逻辑部分负责实现将物品放置进背包、对背包内物品进行管理以及使用背包内物品等功能。实际上,当我们获取或移动物品时,我们会直接修改背包数据库中的物品信息。修改完成后,我们通过背包中的UI元素来获取背包数据库中相应索引的物品信息,并将物品栏中的UI信息更新为数据库中对应序号的物品的图片和数量。 通过将背包系统分解为数据、逻辑和UI三部分,我们可以有效地管理背包系统的复杂逻辑关系,并使代码更加清晰和易于维护。这种设计模式有助于提高游戏开发的效率和代码质量。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Unity游戏开发:背包系统的实现](https://blog.csdn.net/float_freedom/article/details/126243888)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Unity3D RPG实现 2 —— 背包系统](https://blog.csdn.net/weixin_43757333/article/details/123187025)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值