1.制作系统
在游戏里我们可以通过材料来制作装备,当我们点击合成表中的装备时,它会检测我们是否有足够的材料数量来制作
创建相应的物品槽
ItemData_Equipment脚本:
[Header("Crafting Requiring")]
public List<InventoryItem> craftingMaterials;//需要材料的列表
Inventory脚本:
public bool canCraft(ItemData_Equipment _itemToCraft,List<InventoryItem> _requireMaterials)//是否可以制作
{
List<InventoryItem> MaterialToRemove = new List<InventoryItem>();//用来保存删除的材料
for(int i =0;i<_requireMaterials.Count;i++)
{
if (stashItemsDictionary.TryGetValue(_requireMaterials[i].data, out InventoryItem stashValue))//检查玩家材料列表
{
if(stashValue.stackSize < _requireMaterials[i].stackSize)
{
Debug.Log("Not enough Materials");
return false;
}
else//如果有足够的材料
{
MaterialToRemove.Add(_requireMaterials[i]);//添加到删除列表
}
}
else
{
Debug.Log("Not enough Materials");
return false;
}
}
for(int i=0;i<MaterialToRemove.Count;i++)//删除
{
if (stashItemsDictionary.TryGetValue(MaterialToRemove[i].data, out InventoryItem value))
{
value.stackSize -= MaterialToRemove[i].stackSize;
if (value.stackSize < 1)
{
stash.Remove(value);
stashItemsDictionary.Remove(MaterialToRemove[i].data);
}
}
}
UpdataSlotUI();
AddItem(_itemToCraft);//将合成的装备添加到装备列表
Debug.Log("here is" + _itemToCraft.ItemName);
return true;
}
创建UI_craftSlot脚本:
private void OnEnable()
{
UpdataSlot(Item);//更新
}
public override void OnPointerDown(PointerEventData eventData)
{
if (Item == null)
{
return;
}
if (eventData.pointerCurrentRaycast.gameObject == gameObject)
{
ItemData_Equipment craftData = Item.data as ItemData_Equipment;
Inventory.instance.canCraft(craftData, craftData.craftingMaterials);//调用合成
}
}

2.实现敌人掉落指定物品
为物品添加一个子对象名为触发器,它专门负责拾取
为物品本身添加2D刚体,我们希望物品掉落时有随机速度

添加Item层级确保人物不会和物品碰撞
制作为预制体
ItemObject脚本:
[SerializeField] private Rigidbody2D rb;
**[SerializeField] private Vector2 velocity;
SerializeField\] private ItemData itemData;**
**private void SetupVisuals()
{
if (itemData == null)
return;
GetComponent\
public float dropChance;//添加掉落几率**
ItemDrop脚本:
**[SerializeField] private int possibleItemDrop;//掉落的数量
SerializeField\] private ItemData\[\] possibleDrop;//可能掉落的物品
private List\