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

相关推荐
siy23334 小时前
[c语言日记] 数组的一种死法和两种用法
c语言·开发语言·笔记·学习·链表
土了个豆子的5 小时前
04.事件中心模块
开发语言·前端·visualstudio·单例模式·c#
老华带你飞5 小时前
考研论坛平台|考研论坛小程序系统|基于java和微信小程序的考研论坛平台小程序设计与实现(源码+数据库+文档)
java·vue.js·spring boot·考研·小程序·毕设·考研论坛平台小程序
CHEN5_025 小时前
leetcode-hot100 11.盛水最多容器
java·算法·leetcode
songx_995 小时前
leetcode18(无重复字符的最长子串)
java·算法·leetcode
死也不注释5 小时前
【Unity UGUI 交互组件——Scrollbar(8)】
unity·游戏引擎·交互
@areok@6 小时前
C++mat传入C#OpencvCSharp的mat
开发语言·c++·opencv·c#
在路上`6 小时前
前端学习之后端java小白(三)-sql外键约束一对多
java·前端·学习
dazhong20126 小时前
Spring Boot 项目新增 Module 完整指南
java·spring boot·后端
xrkhy6 小时前
SpringBoot之日志处理(logback和AOP记录操作日志)
java·spring boot·logback