Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释,可供学习Alex教程的人参考
此代码仅为较上一P有所改变的代码
【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili
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 List<UI_CraftSlot> craftSlots;//暂时保存将要删除的craftSlotprivate void Start(){AssignCraftSlots();}private void AssignCraftSlots()//获得当前所有的craftSlot函数//主要用来为清空做准备{for (int i = 0; i < craftEquipment.Count; i++){craftSlots.Add(craftSlotParent.GetChild(i).GetComponent<UI_CraftSlot>());}}public void SetupCraftList()//将所有保存在其中的装备类型实例化craftslot并存入CraftList的函数{AssignCraftSlots();for (int i = 0; i < craftSlots.Count;i++)//删除所有原来存在于其list里的slot{Destroy(craftSlots[i].gameObject);Debug.Log(1);}craftSlots = new List<UI_CraftSlot>();//清空此槽,方便下一次装其他的装备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();}
}
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;}private void OnValidate(){//UpdateSlots(item);}public override void OnPointerDown(PointerEventData eventData){ItemData_Equipment craftData = item.data as ItemData_Equipment;Inventory.instance.CanCraft(craftData, craftData.craftingMaterials);}
}