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

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

前言

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

砍树功能

新增树健康控制脚本,死亡随机掉落物品

public class TreeHealth : MonoBehaviour
{
    [SerializeField] private int currentHealth = 10; // 当前树的生命值
    [SerializeField] private List<ItemDrop> itemDrops = new List<ItemDrop>(); // 掉落物品列表

    // 受到伤害
    public void takeDamage(int damage, GameObject player)
    {
        currentHealth -= damage; // 减少当前生命值

        if (currentHealth <= 0)
        {
            // 根据掉落物品列表进行物品掉落
            foreach (ItemDrop item in itemDrops)
            {
                int quantityToDrop = Random.Range(item.minQuantityToDrop, item.maxQuantityToDrop + 1); // 随机生成掉落物品数量

                if (quantityToDrop == 0)
                    return; // 如果掉落数量为0,则直接返回

                Item droppedItem = Instantiate(item.ItemToDrop, transform.position, Quaternion.identity).GetComponent<Item>(); // 实例化掉落物品
                droppedItem.currentQuantity = quantityToDrop; // 设置掉落物品的数量
                player.GetComponent<Inventory>().addItemToInventory(droppedItem); // 将掉落物品加入玩家背包
                Destroy(gameObject); // 销毁树对象
            }
        }
    }
}

// 物品掉落类
[System.Serializable]
public class ItemDrop
{
    public GameObject ItemToDrop; // 要掉落的物品
    public int minQuantityToDrop = 1; // 最小掉落数量
    public int maxQuantityToDrop = 5; // 最大掉落数量
}

配置树掉落物品

再新增斧头控制脚本

public class AxeItem : MonoBehaviour
{
    [SerializeField] private int axeDamage = 5; // 斧头造成的伤害值

    private void Update()
    {
        if (Input.GetMouseButtonDown(0)) // 点击鼠标左键
        {
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); // 发射射线
            RaycastHit hit;

            if (Physics.Raycast(ray, out hit, 4f)) // 如果射线碰撞到物体
            {
                if (hit.collider.GetComponent<TreeHealth>()) // 如果碰撞到的物体有TreeHealth组件
                {
                    hit.collider.GetComponent<TreeHealth>().takeDamage(axeDamage, transform.root.gameObject); // 对该物体造成伤害
                }
            }
        }
    }
}

配置石斧伤害

效果

源码

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

目录
相关文章
|
图形学
Unity 获取鼠标位置下的UGUI或3D物体
本文总结了两种检测方法,分别用于UGUI和3D物体的检测。第一种方法`GetOverUIobj`专门用于检测鼠标悬停的UGUI元素,通过`GraphicRaycaster`实现。第二种方法`GetOverWordGameObject`则同时适用于UI和3D物体检测,利用`PhysicsRaycaster`进行射线检测。两者均返回悬停对象或null。
|
前端开发 图形学
unity UGUI跟随3D物体的坐标转换
在 Unity 中实现 UGUI 元素跟随 3D 物体,关键是将 3D 物体的世界坐标转换为屏幕或画布坐标。通过 Camera.WorldToScreenPoint 方法,可将 3D 物体位置映射到屏幕上,再更新 UGUI 元素的位置。代码示例展示了如何使用该方法,使 UGUI 图像跟随 3D 模型,并提供文字显示、图像和线条的显示/隐藏功能。
|
人工智能 图形学
【制作100个unity游戏之24】unity制作一个3D动物AI生态系统游戏2(附项目源码)
【制作100个unity游戏之24】unity制作一个3D动物AI生态系统游戏2(附项目源码)
749 1
【制作100个unity游戏之24】unity制作一个3D动物AI生态系统游戏2(附项目源码)
|
人工智能 图形学
【制作100个unity游戏之24】unity制作一个3D动物AI生态系统游戏1(附项目源码)
【制作100个unity游戏之24】unity制作一个3D动物AI生态系统游戏1(附项目源码)
718 3
|
图形学 索引
【制作100个unity游戏之25】3D背包、库存、制作、快捷栏、存储系统、砍伐树木获取资源、随机战利品宝箱4(附带项目源码)
【制作100个unity游戏之25】3D背包、库存、制作、快捷栏、存储系统、砍伐树木获取资源、随机战利品宝箱4(附带项目源码)
1033 2
|
Rust 图形学
【unity实战】使用unity制作一个类似Rust的3D生存建造建筑系统,具有很好的吸附性(附项目源码)
【unity实战】使用unity制作一个类似Rust的3D生存建造建筑系统,具有很好的吸附性(附项目源码)
1192 1
|
图形学
【制作100个unity游戏之25】3D背包、库存、制作、快捷栏、存储系统、砍伐树木获取资源、随机战利品宝箱10(附带项目源码)
【制作100个unity游戏之25】3D背包、库存、制作、快捷栏、存储系统、砍伐树木获取资源、随机战利品宝箱10(附带项目源码)
581 1
|
Go 图形学
【Unity小技巧】3D人物移动脚步和跳跃下落音效控制
【Unity小技巧】3D人物移动脚步和跳跃下落音效控制
694 1
|
图形学
【推荐100个unity插件之19】武器拖尾特效插件——Pocket RPG Weapon Trails(2d 3d通用)
【推荐100个unity插件之19】武器拖尾特效插件——Pocket RPG Weapon Trails(2d 3d通用)
1054 0
|
图形学
【unity实战】3D水系统,游泳,潜水,钓鱼功能实现
【unity实战】3D水系统,游泳,潜水,钓鱼功能实现
1160 0

热门文章

最新文章