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

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. 手榴弹动画放在上半身层,有一个空闲动画和投掷动画;

    相关文章:

  1. 广告推荐算法 - 学习笔记
  2. AL11和SM69 文件服务器中创建文件夹
  3. 二叉树练习
  4. 垃圾短信分类
  5. 深度学习篇---卷积网络结构
  6. 23种设计模式-创建型模式-单例
  7. WPF 与 C# 开发深度剖析
  8. 如何避免权限分配不合理导致的信息安全风险?
  9. 【天梯赛】L2-012(实战反思代码实现)
  10. 压测工具开发(一)——使用Qt Designer构建简单界面
  11. Java编程思想:为何有时要将子类对象赋值给父类引用
  12. 六级备考 词汇量积累(day11)
  13. DNS域名解析服务
  14. 【区块链安全 | 第一篇】密码学原理
  15. C++初阶入门基础二——类和对象(中)
  16. 避免踩坑!查收查引常见问题解答
  17. C语言动态内存管理深度解析与嵌入式开发实战
  18. 12_JavaScript_实现日期
  19. dfs(深度优先)——太抽象了
  20. 【新能源汽车实验室设备控制:PLC与单片机选型指南(深度解析+实战案例)】
  21. 海昏侯博物馆展览上新,“西汉帝陵文化展”将持续展出3个月
  22. 人形机器人灵犀X2掌握新技能:有了“内心戏”,还会拳脚功夫
  23. 牛市早报|持续推进城市更新行动意见印发,证监会强化上市公司募资监管
  24. 科普|男性这个器官晚到岗,可能影响生育能力
  25. “中国神湖”加快放大资源规模!3亿美元换海外年产380万吨钾盐项目
  26. 京东回应外卖系统崩溃:订单暴涨所致,已恢复