当前位置: 首页 > news >正文

Unity类银河恶魔城学习记录12-7-2 p129 Craft UI - part 2源代码

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释,可供学习Alex教程的人参考
此代码仅为较上一P有所改变的代码

 



【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili

UI_CraftWindow.cs
using UnityEngine.UI;
using TMPro;
using UnityEngine;
using Unity.VisualScripting;public class UI_CraftWindow : MonoBehaviour
{[SerializeField] private TextMeshProUGUI itemName;[SerializeField] private TextMeshProUGUI itemDescription;[SerializeField] private Image itemIcon;[SerializeField] private Button craftButton;[SerializeField] private Image[] materialsImage;public void SetUpCraftWIndow(ItemData_Equipment _data){craftButton.onClick.RemoveAllListeners();//防止出现点击Button出现其他的函数for (int i = 0; i < materialsImage.Length; i++)//将所有的UI设置为clear颜色{materialsImage[i].color = Color.clear;materialsImage[i].GetComponentInChildren<TextMeshProUGUI>().color = Color.clear;}for(int i = 0;i < _data.craftingMaterials.Count; i++){if(_data.craftingMaterials.Count > materialsImage.Length){Debug.LogWarning("材料比格子数还多了");}materialsImage[i].sprite = _data.craftingMaterials[i].data.icon;materialsImage[i].color = Color.white;TextMeshProUGUI materialsSlotText = materialsImage[i].GetComponentInChildren<TextMeshProUGUI>();materialsSlotText.text = _data.craftingMaterials[i].stackSize.ToString();materialsSlotText.color = Color.white;}itemIcon.sprite = _data.icon;itemName.text = _data.itemName;itemDescription.text = _data.GetDescription();craftButton.onClick.AddListener(() => Inventory.instance.CanCraft(_data, _data.craftingMaterials));}
}

UI_CraftList.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;public class UI_CraftList : MonoBehaviour,IPointerDownHandler
{[SerializeField] private GameObject craftSlotPrefab;//创建craftSlot的预制体[SerializeField] private List<ItemData_Equipment> craftEquipment;//一个将要导进craftList的data类型组[SerializeField] private Transform craftSlotParent;//便于寻找将要删除的craftSlot的父组件//[SerializeField] private UI_CraftSlot[] craftSlots;//暂时保存将要删除的craftSlotprivate void Start(){//AssignCraftSlots();transform.parent.GetChild(0).GetComponent<UI_CraftList>().SetupCraftList();SetupDefaultCraftWindow();}//private void AssignCraftSlots()//获得当前所有的craftSlot函数//主要用来为清空做准备//{//    craftSlots = craftSlotParent.GetComponentsInChildren<UI_CraftSlot>();//}public void SetupCraftList()//将所有保存在其中的装备类型实例化craftslot并存入CraftList的函数{//AssignCraftSlots();for (int i = 0; i < craftSlotParent.childCount;i++)//删除所有原来存在于其list里的slot{Destroy(craftSlotParent.GetChild(i).gameObject);}//craftSlots = null;//清空此槽,方便下一次装其他的装备for(int i = 0;i < craftEquipment.Count;i++){GameObject newSlot = Instantiate(craftSlotPrefab, craftSlotParent);//创建的实例往craftPartent里塞newSlot.GetComponent<UI_CraftSlot>().SetUpCraftSlot(craftEquipment[i]);}}public void OnPointerDown(PointerEventData eventData){SetupCraftList();}public void SetupDefaultCraftWindow(){if (craftEquipment[0] != null){GetComponentInParent<UI>().craftWindow.SetUpCraftWIndow(craftEquipment[0]);}}
}

UI_CraftSlot.cs
using UnityEngine.EventSystems;public class UI_CraftSlot : UI_itemSlot
{protected override void Start(){base.Start();}public void SetUpCraftSlot(ItemData_Equipment _data)//设置CraftSlot的公开函数{if (_data == null)return;item.data = _data;itemImage.sprite = _data.icon;itemText.text = _data.name;if(itemText.text.Length > 12){itemText.fontSize = 24 * .7f;}else{itemText.fontSize = 24;}}private void OnValidate(){//UpdateSlots(item);}public override void OnPointerDown(PointerEventData eventData){ui.craftWindow.SetUpCraftWIndow(item.data as ItemData_Equipment);}
}
UI.cs
using UnityEngine;public class UI : MonoBehaviour
{[SerializeField] private GameObject characterUI;[SerializeField] private GameObject skillTreeUI;[SerializeField] private GameObject craftUI;[SerializeField] private GameObject optionsUI;public UI_itemTooltip itemToolTip;public UI_statToolTip statToopTip;public UI_CraftWindow craftWindow;public void Start(){SwitchTo(null);itemToolTip.gameObject.SetActive(false);statToopTip.gameObject.SetActive(false);}private void Update(){if(Input.GetKeyDown(KeyCode.C)){SwitchWithKeyTo(characterUI);}if(Input.GetKeyDown(KeyCode.B)){SwitchWithKeyTo(craftUI);}if(Input.GetKeyDown(KeyCode.K)){SwitchWithKeyTo(skillTreeUI);}if(Input.GetKeyDown(KeyCode.O)){SwitchWithKeyTo(optionsUI);}    }public void SwitchTo(GameObject _menu)//切换窗口函数{for (int i = 0; i < transform.childCount; i++){transform.GetChild(i).gameObject.SetActive(false);}if (_menu != null){_menu.SetActive(true);}}public void SwitchWithKeyTo(GameObject _menu)//键盘切换窗口函数{if (_menu != null && _menu.activeSelf)//通过判断是否传入mune和mune是否激活来决定使设置为可视或不可使{_menu.SetActive(false);return;}SwitchTo(_menu);}
}

UI_itemSlot.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using TMPro;
using UnityEngine.EventSystems;public class UI_itemSlot : MonoBehaviour ,IPointerDownHandler, IPointerEnterHandler, IPointerExitHandler
{[SerializeField] protected Image itemImage;[SerializeField] protected TextMeshProUGUI itemText;protected UI ui;public InventoryItem item;protected virtual void Start(){ui = GetComponentInParent<UI>();}public void UpdateSlots(InventoryItem _newItem){item = _newItem;itemImage.color = Color.white;if (item != null){itemImage.sprite = item.data.icon;if (item.stackSize > 1){itemText.text = item.stackSize.ToString();}else{itemText.text = "";}}}public void CleanUpSlot()//解决出现UI没有跟着Inventory变化的bug{item = null;itemImage.sprite = null;itemImage.color = Color.clear;itemText.text = "";}public virtual void OnPointerDown(PointerEventData eventData){if(item == null)//修复点击空白处会报错的bug{return;}if(Input.GetKey(KeyCode.LeftControl)){Inventory.instance.RemoveItem(item.data);ui.itemToolTip.HideToolTip();return;}if (item.data.itemType == ItemType.Equipment)Inventory.instance.EquipItem(item.data);ui.itemToolTip.HideToolTip();//修复已经装备了装备还会出现详细信息栏的bug}public void OnPointerEnter(PointerEventData eventData){if (item == null || item.data == null)return;ui.itemToolTip.ShowToolTip(item.data as ItemData_Equipment);}public void OnPointerExit(PointerEventData eventData){if (item == null || item.data == null)return;ui.itemToolTip.HideToolTip();}
}

UI_equipementSlots.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;public class UI_equipementSlots : UI_itemSlot
{public EquipmentType slotType;//这怎么拿到的private void OnValidate(){gameObject.name = "Equipment slot -" + slotType.ToString();}public override void OnPointerDown(PointerEventData eventData){if (item == null || item.data == null)//修复点击空白处会报错的bugreturn;//点击装备槽后卸下装备Inventory.instance.AddItem(item.data as ItemData_Equipment);Inventory.instance.Unequipment(item.data as ItemData_Equipment);ui.itemToolTip.HideToolTip();//修复已经装备了装备还会出现详细信息栏的bugCleanUpSlot();}
}

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • git lfs如何使用
  • AI-漫画推文
  • 二维数组及其内存图解
  • 云手机提供私域流量变现方案
  • 如何在Java中创建对象输入流
  • WPF Pack
  • C# 字符串和枚举类型互相转换
  • 007 spring aop(通知)(xml)
  • fastlio2 保存每帧的点云和每帧的里程计为单独的文件做后端回环优化和手动回环优化
  • 整数和(推公式)
  • MongoDB复制集安装配置图文教程-Windows篇 fasstgpt必看
  • Rust---复合数据类型之字符串与切片(2)
  • LangChain - PromptTemplate
  • k8s删除namespace失败一直处于Terminating状态
  • 【第十一届大唐杯全国大学生新一代信息通信技术大赛】赛题分析
  • [case10]使用RSQL实现端到端的动态查询
  • 【css3】浏览器内核及其兼容性
  • Django 博客开发教程 8 - 博客文章详情页
  • Git的一些常用操作
  • in typeof instanceof ===这些运算符有什么作用
  • JS数组方法汇总
  • JS字符串转数字方法总结
  • RxJS 实现摩斯密码(Morse) 【内附脑图】
  • Theano - 导数
  • 程序员该如何有效的找工作?
  • 复杂数据处理
  • 简单数学运算程序(不定期更新)
  • 蓝海存储开关机注意事项总结
  • 聊聊sentinel的DegradeSlot
  • 前端存储 - localStorage
  • -- 数据结构 顺序表 --Java
  • 我感觉这是史上最牛的防sql注入方法类
  • 用jquery写贪吃蛇
  • 原生Ajax
  • 怎么把视频里的音乐提取出来
  • AI算硅基生命吗,为什么?
  • SAP CRM里Lead通过工作流自动创建Opportunity的原理讲解 ...
  • ​草莓熊python turtle绘图代码(玫瑰花版)附源代码
  • # Kafka_深入探秘者(2):kafka 生产者
  • #Datawhale AI夏令营第4期#AIGC文生图方向复盘
  • #etcd#安装时出错
  • #include到底该写在哪
  • (0)Nginx 功能特性
  • (1)(1.9) MSP (version 4.2)
  • (1)Nginx简介和安装教程
  • (7)svelte 教程: Props(属性)
  • (C语言版)链表(三)——实现双向链表创建、删除、插入、释放内存等简单操作...
  • (超简单)构建高可用网络应用:使用Nginx进行负载均衡与健康检查
  • (二)PySpark3:SparkSQL编程
  • (南京观海微电子)——COF介绍
  • (十五)使用Nexus创建Maven私服
  • (四)Android布局类型(线性布局LinearLayout)
  • (一)Kafka 安全之使用 SASL 进行身份验证 —— JAAS 配置、SASL 配置
  • (一)springboot2.7.6集成activit5.23.0之集成引擎
  • (译) 理解 Elixir 中的宏 Macro, 第四部分:深入化