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

相关推荐
better_liang22 分钟前
每日Java面试场景题知识点之-XXL-JOB分布式任务调度实践
java·spring boot·xxl-job·分布式任务调度·企业级开发
会游泳的石头24 分钟前
一行注解防死循环:MyBatis 递归深度限制(无需 level 字段)
java·mybatis
q***o37625 分钟前
Spring Boot环境配置
java·spring boot·后端
oMcLin27 分钟前
如何在SUSE Linux Enterprise Server 15 SP4上通过配置并优化ZFS存储池,提升文件存储与数据备份的效率?
java·linux·运维
TaiKuLaHa41 分钟前
Spring Bean的生命周期
java·后端·spring
charlie1145141911 小时前
嵌入式的现代C++教程——constexpr与设计技巧
开发语言·c++·笔记·单片机·学习·算法·嵌入式
好奇龙猫1 小时前
【AI学习-comfyUI学习-三十二节-FLXU原生态反推+controlnet depth(UNion)工作流-各个部分学习】
人工智能·学习
刀法如飞1 小时前
开箱即用的 DDD(领域驱动设计)工程脚手架,基于 Spring Boot 4.0.1 和 Java 21
java·spring boot·mysql·spring·设计模式·intellij-idea
我是苏苏1 小时前
Web开发:C#通过ProcessStartInfo动态调用执行Python脚本
java·服务器·前端