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

Unity射击游戏手榴弹笔记

数据

  1. 在物品系统增加一个新的物品类,手榴弹类,定义手榴弹依附物体的类、配表数据类、背包内物品数据类、新建配表、在背包增加手榴弹数组;
  2. 手榴弹的预制体需要可拾取的、扔出的;
  3. 背包界面增加背包内的手榴弹、场景里的手榴弹、别人背包的手榴弹格子;
  4. 人物有一个int grenadeIndex记录当前拿着的手榴弹在背包手榴弹列表的索引,没拿手榴弹时是-1;

逻辑

  1. 在交互系统的拾取物品分支增加对手榴弹类的判断;
  2. GetNextGrenade():在背包的手榴弹列表遍历,有和grenadeIndex类型不同的手榴弹则返回索引,没有则返回-1;
    public int GetNextGrenade(){
            if(grenadeInHandIndex==-1){//手里没有手榴弹
                if(backpack.itemsInPack.grenadesInPack.Count>0){//背包里有,拿第一个
                    return 0;
                }
                else{
                    return -1;//背包里没有,不拿
                }
            }
            for(int i=0;i<backpack.itemsInPack.grenadesInPack.Count;i++){//手里有手榴弹,切换下一种
                if(backpack.itemsInPack.grenadesInPack[i].id!=
                backpack.itemsInPack.grenadesInPack[grenadeInHandIndex].id){
                    return i;
                }
            }
            return -1;
        }
  3. UseGrenade(),先执行grenadeIndex=GetNextGrenade(),在右手实例化手榴弹,没有则回到空手;
public void UseGrenade(){
        grenadeInHandIndex=GetNextGrenade();//去背包拿手榴弹
        if(grenadeInHandIndex==-1){//没拿到
            PutAwayGun();
            return;
        }
        animator.SetInteger(gunStatusPara,3);
        GrenadeDataBin grenadeDataBin=ItemDataManager.Instance.GetGrenadeData(
            backpack.itemsInPack.grenadesInPack[grenadeInHandIndex].id);
        grenadeInHand=Instantiate(grenadeDataBin.prefab,weaponHolder).GetComponent<Grenade>();
        grenadeInHand.grenadeDataBin = grenadeDataBin;
        grenadeInHand.owner=this;
    }
  1. 扔手榴弹方法通过动画事件执行
public void ThrowGrenade(){
        grenadeInHand.Throwed(aimAxis.forward*throwSpeed);
        backpack.TakeOutGrenade(grenadeInHandIndex);
        grenadeInHand=null;
        grenadeInHandIndex=-1;
        UseGrenade();//拿下一个或空手
    }
public void Throwed(Vector3 velocity){
            transform.SetParent(null);
            rigidbody.isKinematic=false;
            collider.isTrigger=false;
            rigidbody.velocity=velocity;
            Destroy(gameObject,lifeTime);
        }

    动画

    1. 手榴弹动画放在上半身层,有一个空闲动画和投掷动画;

    http://www.kler.cn/a/600774.html

    相关文章:

  1. 深度学习算法清单
  2. 1.认识Excel
  3. K8S遇到过的比较深刻的Pod问题
  4. 【留一下记录】Vllm在Linux环境下的学习笔记
  5. 青少年编程与数学 02-011 MySQL数据库应用 18课题、性能监控
  6. 一个轻量级的 SQLite ORM 工具包
  7. PP-PLL:基于概率传播的部分标签学习
  8. 基于概率图模型的蛋白质功能预测
  9. DeepSeek 发布DeepSeek-V3-0324 版本 前端与网页开发能力、推理与多任务能力提升
  10. 春风拂处,杏韵流芳-中小企实战运营和营销工作室博客
  11. 搜索旋转排序数组
  12. LeetCode 2711:对角线上不同值的数量差解题思路与优化方法
  13. DeepSeek 的组网方案介绍
  14. 详解vector容器
  15. WPF Binding转换器Converter
  16. 浅尝AI编程工具Trae
  17. 嵌入式八股文学习——基类构造与析构、成员初始化及继承特性详解
  18. Zerotier虚拟局域网在树莓派的应用和Syncthing配合Zerotier实现端到端文件同步
  19. linux命令行工具进阶
  20. 定时器(java)