当前位置: 首页 > news >正文

学习游戏制作记录(玩家掉落系统,删除物品功能和独特物品)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<InventoryItem> itemTounequip = new List<InventoryItem>();//储存需要删除的装备材料列表
List<InventoryItem> MaterialsToLose = new List<InventoryItem>();    

        foreach(InventoryItem item in inventory.GetEquipmentList())//调用玩家的装备列表
{
if(Random.Range(0,100)<chanceToDropEquip)
{
DropItem(item.data);//成功掉落

                itemTounequip.Add(item);//添加到删除的列表
}
}

        for(int i = 0; i < itemTounequip.Count; i++)
{
inventory.UnequipItem(itemTounequip[i].data as ItemData_Equipment);//删除
}

        foreach(InventoryItem item in inventory.GetStashList())//同理
{
if(Random.Range(0,100)<chanceToDropMaterial)
{
DropItem(item.data);

                MaterialsToLose .Add(item);
}
}

        for (int i = 0;i<MaterialsToLose.Count;i++)
{
inventory.RemoveItem(MaterialsToLose[i].data);
}

        
}
}

 PlayerStats脚本:

    protected override void Die()
{
base.Die();

        player.Die();

        GetComponent<PlayerItemDrop>().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<ItemData_Equipment, InventoryItem> 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<Enemy>()!=null)
{
EnemyStats EnemyTarget = hit.GetComponent<EnemyStats>();

                player.state.DoDamage(EnemyTarget);

                Inventory.instance.GetEquipment(EquipmentType.Weapon).ExcuteEffect();//这里测试武器的效果实现
}
}
}

给这个物品数据添加效果

成功触发

http://www.dtcms.com/a/335723.html

相关文章:

  • 论文投稿时,如何绘制插入无失真的图
  • 44.【.NET8 实战--孢子记账--从单体到微服务--转向微服务】--扩展功能--集成网关--网关集成认证(三)
  • 第七十九:AI的“急诊科医生”:模型失效(Loss Explode)的排查技巧——从“炸弹”到“稳定”的训练之路!
  • scikit-learn 中的均方误差 (MSE) 和 R² 评分指标
  • React 第七十节 Router中matchRoutes的使用详解及注意事项
  • 学习一下B树和B+树
  • map和join的用法
  • K8S集群环境搭建
  • [激光原理与应用-291]:理论 - 波动光学 - 相关光与不相干光:光的干涉不是随随便便就能产生的,需要满足严格的条件方能产生光的干涉(条纹)
  • 【科研绘图系列】R语言绘制探究浮游植物成熟阶段的光合作用与溶解性有机碳
  • OpenCV 图像处理核心技术:边界填充、算术运算与滤波处理实战
  • 在 Element UI 的 el-table 中实现某行标红并显示删除线
  • Leaflet赋能:WebGIS视角下的省域区县天气可视化实战攻略
  • Python训练营打卡Day35-复习日
  • 数据赋能(396)——大数据——抽象原则
  • 奈飞工厂无广告纯净版官方下载,最新官网入口
  • 常用的SQL语句
  • 使用vscode的task.json来自动执行make命令,而不直接使用终端
  • java八股文-(spring cloud)微服务篇-参考回答
  • 校园综合数据分析可视化大屏 -Vue纯前端静态页面项目
  • JavaScript字符串详解
  • 2025:AI狂飙下的焦虑与追问
  • 【数据分享】黑龙江省黑土区富锦市土地利用数据
  • 【C#补全计划】多线程
  • GitLab CI/CD、Jenkins与GitHub Actions在Kubernetes环境中的方案对比分析
  • 基于SpringBoot的在线拍卖系统,免费附源码
  • JMeter(入门篇)
  • java基础(十)sql的mvcc
  • WebSocket--精准推送方案(二):实时消息推送-若依项目示例
  • 本地处理不上传!隐私安全的PDF转换解决方案