学习游戏制作记录(玩家掉落系统,删除物品功能和独特物品)8.17

1.实现玩家掉落系统

当玩家死亡时会有一定几率掉落装备和材料

ItemObject_Trigger脚本:

private void OnTriggerEnter2D(Collider2D collision)

{

if(PlayerManage.instance.player.state.isDead) //如果死亡则不能拾取

return;

if (collision.GetComponent<Player>() != null)

{

myItemObject.PickupObject();

}

}

Inventory脚本:

public List<ItemData> startingItem;//初始物品

public List<InventoryItem> GetEquipmentList() => equipment;//获取装备列表

public List<InventoryItem> GetStashList() => stash;//获取材料列表

创建PlayerItemDrop脚本:

public class PlayerItemDrop : ItemDrop//继承上一次的掉落脚本

{

Header("Player Drop")

SerializeField\] private float chanceToDropEquip;//掉落装备和材料的概率 \[SerializeField\] private float chanceToDropMaterial; public override void GenerateDrop() { Inventory inventory = Inventory.instance; List\ itemTounequip = new List\();//储存需要删除的装备材料列表 List\ MaterialsToLose = new List\(); foreach(InventoryItem item in inventory.GetEquipmentList())//调用玩家的装备列表 { if(Random.Range(0,100)\().GenerateDrop();//死亡时调用 } 2.实现玩家删除库存物品的功能 UI_ItemSlot脚本: public virtual void OnPointerDown(PointerEventData eventData) { if (Item ==null) { return; } if (eventData.pointerCurrentRaycast.gameObject == gameObject) { if(Input.GetKey(KeyCode.LeftControl))//如果按下左crtl键则删除物品 { Inventory.instance.RemoveItem(Item.data); return; } if (Item.data.itemType == ItemType.Equipment) { Inventory.instance.EquipItem(Item.data); } } } 3.实现独特物品 独特物品即有特殊效果的物品 创建ItemEffect脚本: \[CreateAssetMenu(fileName = "New Item Data", menuName = "Data/Effect")\]//可以直接创建 public class ItemEffect : ScriptableObject { public virtual void ExcuteEffect()//具体效果 { Debug.Log("Effect excuted"); } } ItemData_Equipment脚本: public ItemEffect\[\] itemEffects;//武器拥有的效果 public void ExcuteEffect()//执行效果 { foreach(var effect in itemEffects) { effect.ExcuteEffect(); } } Inventory脚本: public ItemData_Equipment GetEquipment(EquipmentType _type)//获取指定装备武器数据 { ItemData_Equipment equipedItem = null; foreach (KeyValuePair\ item in equipmentDictionary) { if (item.Key.equipmentType == _type) equipedItem = item.Key; } return equipedItem; } PlayerAnimationTriggers脚本: private void AttackTrigger() { Collider2D\[\] collider2Ds = Physics2D.OverlapCircleAll(player.attackCheck.position, player.attackCheckRadius); foreach(var hit in collider2Ds) { if(hit.GetComponent\()!=null) { EnemyStats EnemyTarget = hit.GetComponent\(); player.state.DoDamage(EnemyTarget); Inventory.instance.GetEquipment(EquipmentType.Weapon).ExcuteEffect();//这里测试武器的效果实现 } } } ![](https://i-blog.csdnimg.cn/direct/f5a323e8085846db98b94a594fef5235.png)给这个物品数据添加效果 ![](https://i-blog.csdnimg.cn/direct/454774a0d499438da1c7552e74cfb31c.png) 成功触发

相关推荐
步步为营DotNet2 分钟前
深度解析CancellationToken:.NET中的优雅取消机制
java·前端·.net
学编程的闹钟4 分钟前
107【php手册】
学习
JH30738 小时前
SpringBoot 优雅处理金额格式化:拦截器+自定义注解方案
java·spring boot·spring
盐焗西兰花9 小时前
鸿蒙学习实战之路-Reader Kit修改翻页方式字体大小及行间距最佳实践
学习·华为·harmonyos
暖馒9 小时前
Modbus应用层协议的深度剖析
网络·网络协议·c#·wpf·智能硬件
QiZhang | UESTC9 小时前
学习日记day76
学习
久邦科技9 小时前
20个免费电子书下载网站,实现电子书自由(2025持续更新)
学习
Coder_Boy_9 小时前
技术让开发更轻松的底层矛盾
java·大数据·数据库·人工智能·深度学习
Gain_chance9 小时前
34-学习笔记尚硅谷数仓搭建-DWS层最近一日汇总表建表语句汇总
数据仓库·hive·笔记·学习·datagrip
invicinble10 小时前
对tomcat的提供的功能与底层拓扑结构与实现机制的理解
java·tomcat