学习游戏制作记录(玩家掉落系统,删除物品功能和独特物品)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) 成功触发

相关推荐
叶半欲缺9 小时前
Linux初始化数据盘
java·linux·服务器
Upsy-Daisy9 小时前
AI Agent 项目学习笔记(九):网页搜索、网页抓取与资源下载工具
笔记·python·学习
辰海Coding9 小时前
MiniSpring框架学习-增加事件发布的简化 IoC 容器
java·学习·spring·java-ee
云烟成雨TD9 小时前
Spring AI Alibaba 1.x 系列【54】Interrupts 中断机制:析动态中断源码分析
java·人工智能·spring
布吉岛的石头9 小时前
Java 程序员第 29 阶段-01:大模型微调入门:小样本业务适配方案
java·开发语言·人工智能
小白|9 小时前
cann-learning-hub:昇腾CANN社区学习中心完全指南
java·c++·算法
高林雨露9 小时前
Java 转 Kotlin 对照开发指南
java·开发语言·kotlin
java1234_小锋9 小时前
Spring AI 2.0 开发Java Agent智能体 - 多模态支持
java·人工智能·spring
前端若水9 小时前
使用 IndexedDB 在客户端存储对话记录
java·前端·人工智能·python·机器学习