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

学习游戏制作记录(玩家掉落系统,删除物品功能和独特物品)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.xdnf.cn/news/18012.html

相关文章:

  • Vue深入组件:Props 详解2
  • LINUX学习笔记
  • [RCTF2015]EasySQL
  • 11.苹果ios逆向-FridaHook-ios中的算法-CC_SHA1(sha1算法)
  • maxwell安装部署
  • 裸机框架:按键模组
  • PCA 实现多向量压缩:首个主成分的深层意义
  • 网络通信的基本概念与设备
  • 链路聚合与软件网桥
  • Android面试指南(二)
  • 记SpringBoot3.x + Thymeleaf 项目实现(MVC架构模式)
  • 校园综合数据分析可视化大屏 -Vue纯前端静态页面项目
  • Ugit使用记录
  • Git 入门指南:核心概念与常用命令全解析
  • Docker-14.项目部署-DockerCompose
  • 【Jenkins】02 - 自动化部署配置
  • 【Linux系列】如何在 Linux 服务器上快速获取公网
  • PAT 1068 Find More Coins
  • 补充:用信号量实现前驱关系
  • 【架构师干货】数据库管理系统
  • JavaWeb前端(HTML,CSS具体案例)
  • 火狐(Mozilla Firefox)浏览器离线安装包下载
  • 【JavaEE】多线程 -- 单例模式
  • 2025:AI狂飙下的焦虑与追问
  • SWE-bench:真实世界软件工程任务的“试金石”
  • GANs生成对抗网络生成手写数字的Pytorch实现
  • 原型和原型链的问题
  • mac电脑开发嵌入式基于Clion(stm32CubeMX)
  • ThinkPHP8学习篇(三):控制器
  • 《解构WebSocket断网重连:指数退避算法的前端工业级实践指南》