本节最终效果演示
文章目录
- 本节最终效果演示
- 系列目录
- 前言
- 回收物品
- 素材
- 绘制UI
- 代码控制垃圾桶回收功能
- 效果
- 源码
- 完结
系列目录
前言
欢迎来到【制作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; // 设置垃圾桶图片为关闭状态
}
}
}
挂载脚本,配置参数
这里测试,勾选石头和树枝为可回收物品,并可以同步修改物品功能描述
效果
源码
源码不出意外的话我会放在最后一节
完结
赠人玫瑰,手有余香!如果文章内容对你有所帮助,请不要吝啬你的点赞评论和关注
,以便我第一时间收到反馈,你的每一次支持
都是我不断创作的最大动力。当然如果你发现了文章中存在错误
或者有更好的解决方法
,也欢迎评论私信告诉我哦!
好了,我是向宇
,https://xiangyu.blog.csdn.net
一位在小公司默默奋斗的开发者,出于兴趣爱好,最近开始自学unity,闲暇之余,边学习边记录分享,站在巨人的肩膀上,通过学习前辈们的经验总是会给我很多帮助和启发!php是工作,unity是生活!如果你遇到任何问题,也欢迎你评论私信找我, 虽然有些问题我也不一定会,但是我会查阅各方资料,争取给出最好的建议,希望可以帮助更多想学编程的人,共勉~