Part81:Player drop system

Part81:Player drop system(P113-114)

1:效果和操作

效果:player被击杀有概率丢失装备
操作:利用chanceToLooseMaterials和chanceToLooseItems来控制被击杀后掉落材料和装备的概率,当玩家被击败后则调用GenerateDrop方法,进而根据概率来进行dropitem并且对掉落列表进行遍历从而对背包内的数据进行更新,功能2是control+点击扔掉物品(可以将扔掉的物品实例化,方便再捡再扔)
2:代码改变
//Inventory脚本修改(该脚本用于初始装备设置)

    // [SerializeField] private itemData item;//掉落体信息
    public List<ItemData> startingItem;
		public void Start()
    {
     			AddStartingItems();
    }
		private void AddStartingItems()//初始化物品栏
    {
        for (int i = 0; i < startingItem.Count; i++)
        {
            AddItem(startingItem[i]);
        }
    }

		public List<InventoryItem> GetEquipmentList() => equipment;
    public List<InventoryItem> GetStashList() => stash;
		//上述两行为获取stash和equip列表,用于playeritemdrop直接使用

//PlayerItemDrop脚本新增	
//PlayerItemDrop脚本新增	
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using static UnityEditor.Progress;

public class PlayerItemDrop : ItemDrop
{
    [Header("Player's drop")]
    [SerializeField] private float chanceToLooseItems;//掉落材料概率
	
    [SerializeField] private float chanceToLooseMaterials;//掉落准备概率


    public override void GenerateDrop()
    {
        Inventory inventory = Inventory.instance;//获取单例,便于获取其身上的东西
        List<InventoryItem> itemsToUnequip = new List<InventoryItem>();//掉落装备表
        List<InventoryItem> materialsToLoose = new List<InventoryItem>();//掉落材料表

        foreach (InventoryItem item in inventory.GetEquipmentList())
        {
            if (Random.Range(0, 100) <= chanceToLooseItems)
            {
                DropItem(item.data);//实例化item
                itemsToUnequip.Add(item);//添加到卸下装备表
            }
        }
        for (int i = 0; i < itemsToUnequip.Count; i++)
        {
            inventory.Unequipment(itemsToUnequip[i].data as itemData_Equipment);
          	//掉落
        }


        foreach (InventoryItem item in inventory.GetStashList())
        {
            if (Random.Range(0, 100) <= chanceToLooseMaterials)
            {
                DropItem(item.data);
                materialsToLoose.Add(item);
            }
        }

        for (int i = 0; i < materialsToLoose.Count; i++)
        {
            inventory.RemoveItem(materialsToLoose[i].data);
          //掉落
        }
    }
}
//itemdrop脚本修改
		public virtual void GenerateDrop()//该virtual
    protected virtual void DropItem(ItemData _itemData)//该protected
//ItemObjectTrigger脚本修改
		if (collision.GetComponent<Player>() != null)
    {
      if (collision.GetComponent<CharacterStats>().isDead)
        return;//千万记得及时停止,避免反复鞭尸刷装备
      Debug.Log("pick up item");
      myItemObject.PickupItem();//当发生点击事件则出发拾取函数
    }
//PlayerStats脚本修改
		protected override void Die()
    {
        base.Die();
        player.Die();
        GetComponent<PlayerItemDrop>()?.GenerateDrop();
    }

//CharacterStats脚本修改
		public bool isDead;//修改public
//UI_itemslot脚本修改
public virtual void OnPointerDown(PointerEventData eventData)
    {
        // if (item.data.itemDataType == ItemDataType.Equipment)
        //     Debug.Log("equiped new item" + item.data.name);
        if (Input.GetKey(KeyCode.LeftControl))//按住左control和鼠标点击删除物品
        {
            Inventory.instance.RemoveItem(item.data);
            // Debug.Log("remove"+item.data.name);
            return;
        }
        if (item.data.itemDataType == ItemDataType.Equipment)
            Inventory.instance.EquipItem(item.data);
    }

3:效果图 (图2为control+点击扔物品)

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值