【制作100个unity游戏之23】实现类似七日杀、森林一样的生存游戏9(附项目源码)

简介: 【制作100个unity游戏之23】实现类似七日杀、森林一样的生存游戏9(附项目源码)

前言

欢迎来到【制作100个Unity游戏】系列!本系列将引导您一步步学习如何使用Unity开发各种类型的游戏。在这第23篇中,我们将探索如何制作一个类似于七日杀和森林的生存游戏。


本篇内容会比较多,我会分几篇来实现,感兴趣的可以关注一下,以免错过内容更新。


本节主要实现了垃圾桶回收物品的功能。

回收物品

素材


绘制UI

垃圾桶UI

提示UI

代码控制垃圾桶回收功能

修改InventoryItem,新增变量

public class TrashSlot : MonoBehaviour, IDropHandler, IPointerEnterHandler, IPointerExitHandler
{
    public GameObject trashAlertUI; // 垃圾桶警告界面
    private TextMeshProUGUI textToModify; // 警告界面中的文本组件
    public Sprite trash_closed; // 关闭状态的垃圾桶图片
    public Sprite trash_opened; // 打开状态的垃圾桶图片
    private Image imageComponent; // 垃圾桶的图片组件
    private Button YesBTN; // 确认按钮
    private Button NoBTN; // 取消按钮
    // 被拖拽的物品
    private GameObject draggedItem
    {
        get { return DragDrop.itemBeingDragged; }
    } 

    GameObject itemToBeDeleted;
    

    public string itemName
    {
        get
        {
            string name = itemToBeDeleted.name;
            string toRemove = "(Clone)";
            string result = name.Replace(toRemove, "");
            return result;
        }
    }

    void Start()
    {
        imageComponent = transform.Find("Image").GetComponent<Image>();
        textToModify = trashAlertUI.transform.Find("问题").GetComponent<TextMeshProUGUI>();
        YesBTN = trashAlertUI.transform.Find("确认").GetComponent<Button>();
        YesBTN.onClick.AddListener(delegate { DeleteItem(); });
        NoBTN = trashAlertUI.transform.Find("取消").GetComponent<Button>();
        NoBTN.onClick.AddListener(delegate { CancelDeletion(); });
    }

    public void OnDrop(PointerEventData eventData)
    {
        if (draggedItem.GetComponent<InventoryItem>().isTrashable == true) // 如果被拖拽的物品可被丢弃
        {
            itemToBeDeleted = draggedItem.gameObject; // 设置要删除的物品为被拖拽的物品
            StartCoroutine(notifyBeforeDeletion()); // 开始删除前的警告流程
        }
    }

    IEnumerator notifyBeforeDeletion()
    {
        trashAlertUI.SetActive(true); // 显示警告界面
        textToModify.text = "确认丢弃 " + itemName + "?"; // 设置警告文本
        yield return new WaitForSeconds(1f);
    }

    private void CancelDeletion()
    {
        imageComponent.sprite = trash_closed; // 设置垃圾桶图片为关闭状态
        trashAlertUI.SetActive(false); // 隐藏警告界面
    }

    private void DeleteItem()
    {
        imageComponent.sprite = trash_closed; // 设置垃圾桶图片为关闭状态
        Destroy(itemToBeDeleted.gameObject); // 立即销毁要删除的物品
        InventorySystem.Instance.ReCalculeList(); // 重新计算物品列表
        CraftingSystem.Instance.RefreshNeededItems(); // 刷新需要的物品
        trashAlertUI.SetActive(false); // 隐藏警告界面
    }

    public void OnPointerEnter(PointerEventData eventData)
    {
        if (draggedItem != null && draggedItem.GetComponent<InventoryItem>().isTrashable == true) // 如果有被拖拽的物品且可被丢弃
        {
            imageComponent.sprite = trash_opened; // 设置垃圾桶图片为打开状态
        }
    }

    public void OnPointerExit(PointerEventData eventData)
    {
        if (draggedItem != null && draggedItem.GetComponent<InventoryItem>().isTrashable == true) // 如果有被拖拽的物品且可被丢弃
        {
            imageComponent.sprite = trash_closed; // 设置垃圾桶图片为关闭状态
        }
    }
}

挂载脚本,配置参数

这里测试,勾选石头和树枝为可回收物品,并可以同步修改物品功能描述

效果

image.png

源码

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

目录
相关文章
|
6月前
|
图形学
【制作100个unity游戏之28】花半天时间用unity复刻童年4399经典小游戏《黄金矿工》(附带项目源码)
【制作100个unity游戏之28】花半天时间用unity复刻童年4399经典小游戏《黄金矿工》(附带项目源码)
195 0
|
6月前
|
图形学
【制作100个unity游戏之23】实现类似七日杀、森林一样的生存游戏5(附项目源码)
【制作100个unity游戏之23】实现类似七日杀、森林一样的生存游戏5(附项目源码)
56 2
【制作100个unity游戏之23】实现类似七日杀、森林一样的生存游戏5(附项目源码)
|
6月前
|
图形学
【制作100个unity游戏之23】实现类似七日杀、森林一样的生存游戏14(附项目源码)
【制作100个unity游戏之23】实现类似七日杀、森林一样的生存游戏14(附项目源码)
37 3
|
6月前
|
图形学
【制作100个unity游戏之23】实现类似七日杀、森林一样的生存游戏4(附项目源码)
【制作100个unity游戏之23】实现类似七日杀、森林一样的生存游戏4(附项目源码)
30 2
|
6月前
|
图形学
【制作100个unity游戏之23】实现类似七日杀、森林一样的生存游戏8(附项目源码)
【制作100个unity游戏之23】实现类似七日杀、森林一样的生存游戏8(附项目源码)
24 1
|
6月前
|
图形学
【制作100个unity游戏之23】实现类似七日杀、森林一样的生存游戏13(附项目源码)
【制作100个unity游戏之23】实现类似七日杀、森林一样的生存游戏13(附项目源码)
39 1
|
6月前
|
图形学
【制作100个unity游戏之23】实现类似七日杀、森林一样的生存游戏12(附项目源码)
【制作100个unity游戏之23】实现类似七日杀、森林一样的生存游戏12(附项目源码)
29 1
|
6月前
|
图形学
【制作100个unity游戏之23】实现类似七日杀、森林一样的生存游戏10(附项目源码)
【制作100个unity游戏之23】实现类似七日杀、森林一样的生存游戏10(附项目源码)
26 1
|
6月前
|
图形学
【制作100个unity游戏之29】使用unity复刻经典游戏《愤怒的小鸟》(完结,附带项目源码)(上)
【制作100个unity游戏之29】使用unity复刻经典游戏《愤怒的小鸟》(完结,附带项目源码)
237 2
|
6月前
|
人工智能 图形学
【制作100个unity游戏之23】实现类似七日杀、森林一样的生存游戏1(附项目源码)
【制作100个unity游戏之23】实现类似七日杀、森林一样的生存游戏1(附项目源码)
59 0