【制作100个unity游戏之25】3D背包、库存、制作、快捷栏、存储系统、砍伐树木获取资源、随机战利品宝箱4(附带项目源码)

简介: 【制作100个unity游戏之25】3D背包、库存、制作、快捷栏、存储系统、砍伐树木获取资源、随机战利品宝箱4(附带项目源码)

前言

欢迎来到【制作100个Unity游戏】系列!本系列将引导您一步步学习如何使用Unity开发各种类型的游戏。在这第25篇中,我们将探索如何用unity制作一个3D背包、库存、制作、快捷栏、存储系统、砍伐树木获取资源、随机战利品宝箱等功能,我会附带项目源码,以便你更好理解它。


快捷栏操作,并可切换手臂

绘制快捷栏UI

复制前面背包UI进行修改即可

代码控制快捷栏切换

修改Item

public class Item : MonoBehaviour
{
    //。。。
    
    public int equippableItemIndex = -1;//装备对应手臂的索引,-1表示该物品不可装备
}

修改Inventory

[Header("UI")]
public List<Slot> hotbarSlots = new List<Slot>();//快捷栏的槽位列表

[Header("可装备的物品")]
public List<GameObject> equippableItems = new List<GameObject>(); // 通常是人物手臂列表
private int curHotbarIndex = -1; // 当前选择的快捷栏索引

public void Start()
{
    toggleInventory(false); // 初始时关闭背包界面

    //合并槽位
    allInventorySlots.AddRange(hotbarSlots);
    allInventorySlots.AddRange(inventorySloats);

    foreach (Slot uiSlot in allInventorySlots) // 初始化所有槽位
    {
        uiSlot.initialiseSlot();
    }
}

public void Update()
{
    //。。。

    for (int i = 1; i < hotbarSlots.Count + 1; i++)
    {
        if (Input.GetKeyDown(i.ToString()))
        {
          curHotbarIndex = i - 1;//设置当前选中的快捷栏索引
            enableHotbarItem(curHotbarIndex);//激活快捷栏中指定索引的装备物品
        }
    }
}

// 激活快捷栏中指定索引的装备物品
private void enableHotbarItem(int hotbarIndex)
{
    // 将每个物品设为不激活状态
    foreach (GameObject item in equippableItems)
    {
        item.SetActive(false);
    }

    // 根据提供的索引,从快捷栏数组中获取对应的槽位
    Slot hotbarSlot = hotbarSlots[hotbarIndex];

    // 检查该槽位是否含有物品
    if (hotbarSlot.hasItem())
    {
        if (hotbarSlot.getItem().equippableItemIndex != -1)
        {
            // 如果物品可装备,根据其装备索引找到对应的手臂对象,并将其设为激活状态
            equippableItems[hotbarSlot.getItem().equippableItemIndex].SetActive(true);
        }
    }
}

为了方便这里就不添加手臂了,直接把物体放在人物前面,实现类似抓住物品的效果

配置所有手臂参数

配置装备物品对应手臂的索引,索引要和手臂的位置对应

配置好快捷栏插槽数据

效果

快捷栏显示选中效果

绘制选中效果UI图

添加一个图片,并把透明度调高,然后把选中效果图x轴默认调很大,这样我们默认就看不到选中效果了,后面再用代码重新定位选中效果图即可

代码重新定位选中效果图

修改Inventory

public Transform selectedItemImage; // 选中框图

// 激活快捷栏中指定索引的装备物品
private void enableHotbarItem(int hotbarIndex)
{
    // 将每个物品设为不激活状态
    foreach (GameObject item in equippableItems)
    {
        item.SetActive(false);
    }

    // 根据提供的索引,从快捷栏数组中获取对应的槽位
    Slot hotbarSlot = hotbarSlots[hotbarIndex];

    selectedItemImage.transform.position = hotbarSlots[hotbarIndex].transform.position;//重新定位选中框图位置

   //。。。
}

配置参数

效果

源码

源码不出意外的话我会放在最后一节

目录
相关文章
|
2天前
|
存储 JSON 关系型数据库
【unity实战】制作unity数据保存和加载系统——大型游戏存储的最优解
【unity实战】制作unity数据保存和加载系统——大型游戏存储的最优解
11 2
|
2天前
|
图形学
【制作100个unity游戏之29】使用unity复刻经典游戏《愤怒的小鸟》(完结,附带项目源码)(上)
【制作100个unity游戏之29】使用unity复刻经典游戏《愤怒的小鸟》(完结,附带项目源码)
10 2
|
2天前
|
存储 JSON 图形学
【unity实战】制作unity数据保存和加载系统——小型游戏存储的最优解
【unity实战】制作unity数据保存和加载系统——小型游戏存储的最优解
6 0
|
2天前
|
图形学
【推荐100个unity插件之19】武器拖尾特效插件——Pocket RPG Weapon Trails(2d 3d通用)
【推荐100个unity插件之19】武器拖尾特效插件——Pocket RPG Weapon Trails(2d 3d通用)
7 0
|
2天前
|
图形学
【制作100个unity游戏之29】使用unity复刻经典游戏《愤怒的小鸟》(完结,附带项目源码)(下)
【制作100个unity游戏之29】使用unity复刻经典游戏《愤怒的小鸟》(完结,附带项目源码)(下)
8 0
|
2天前
|
存储 JSON 关系型数据库
【制作100个unity游戏之27】使用unity复刻经典游戏《植物大战僵尸》,制作属于自己的植物大战僵尸随机版和杂交版13(完结,附带项目源码)
【制作100个unity游戏之27】使用unity复刻经典游戏《植物大战僵尸》,制作属于自己的植物大战僵尸随机版和杂交版13(完结,附带项目源码)
9 0
|
2天前
|
图形学
【制作100个unity游戏之27】使用unity复刻经典游戏《植物大战僵尸》,制作属于自己的植物大战僵尸随机版和杂交版12(附带项目源码)
【制作100个unity游戏之27】使用unity复刻经典游戏《植物大战僵尸》,制作属于自己的植物大战僵尸随机版和杂交版12(附带项目源码)
8 0
|
2天前
|
图形学
【制作100个unity游戏之27】使用unity复刻经典游戏《植物大战僵尸》,制作属于自己的植物大战僵尸随机版和杂交版3(附带项目源码)
【制作100个unity游戏之27】使用unity复刻经典游戏《植物大战僵尸》,制作属于自己的植物大战僵尸随机版和杂交版3(附带项目源码)
13 2
|
2天前
|
图形学
【制作100个unity游戏之27】使用unity复刻经典游戏《植物大战僵尸》,制作属于自己的植物大战僵尸随机版和杂交版2(附带项目源码)
【制作100个unity游戏之27】使用unity复刻经典游戏《植物大战僵尸》,制作属于自己的植物大战僵尸随机版和杂交版2(附带项目源码)
8 1
|
2天前
|
存储 图形学
【制作100个unity游戏之27】使用unity复刻经典游戏《植物大战僵尸》,制作属于自己的植物大战僵尸随机版和杂交版11(附带项目源码)
【制作100个unity游戏之27】使用unity复刻经典游戏《植物大战僵尸》,制作属于自己的植物大战僵尸随机版和杂交版11(附带项目源码)
6 0