通常我们玩GTA系列,暗黑血统系列,虐杀原形等电脑打斗游戏时,都是主角跟着鼠标转向来攻击的。

这意味着要我们自己去寻找目标。

但是移动设备不像laptop或者座机那样操作方便,

所以最近目标攻击在移动设备是很常用的。

下面给出攻击最近目标的主要代码和部分解释:

public float attackRange = 30;
public float attackDistance = 1;
float distance=0;public void AttackA(){GameObject enemy = null;distance = attackDistance;foreach (GameObject go in SpawnManager._instance.enemyList)//在所有敌人列表里面选出距离最短的敌人{float temp = Vector3.Distance(go.transform.position, transform.position);if (temp < distance){enemy = go;distance = temp;}}if (enemy != null)//选出来了{Vector3 targetPos = enemy.transform.position;targetPos.y = transform.position.y;transform.LookAt(targetPos);enemy.GetComponent<ATKAndDamage>().TakeDamage(normalAttack);//该敌人受到攻击}}

至于连击,则在A攻击的动画上添加两处事件AttackBEvent1()和AttackBEvent2()这样做的意思这些添加的事件一定会随着动画播放被调用,你在AttackBEvent1()函数调用之后AttackBEvent2()函数调用之前再次点击就可以出发连击了。

然后再在脚本里面写上

 public void AttackBEvent1(){isCanAttackB = true;}public void AttackBEvent2(){isCanAttackB = false;}

下面这个函数是一个按钮注册监听的函数,在里面实现连击的出发。"AttackB"是在动画控制器里面的trigger参数,控制B攻击的触发。

public void OnNormalAttackClick(){if (animator.GetCurrentAnimatorStateInfo(0).IsName("PlayerAttackA") && isCanAttackB){animator.SetTrigger("AttackB");}else{animator.SetTrigger("AttackA");}}

然后是范围攻击的思路:

  public void AttackRange(){List<GameObject> enemyList = new List<GameObject>();foreach (GameObject go in SpawnManager._instance.enemyList){float temp = Vector3.Distance(go.transform.position, transform.position);if (temp < attackDistance){enemyList.Add(go);}}foreach (GameObject go in enemyList){go.GetComponent<ATKAndDamage>().TakeDamage(attackRange);}}

这里要注意的一个地方就是范围攻击是先加到集合然后再在遍历集合的时候挨个收到伤害。这样做的原因是如果直接不加到集合而是符合条件的挨个受伤害,则在遍历过程中,有些敌人受到伤害会死亡,然后触发Destroy方法销毁敌人物体同时将其在enemyList中删去,但是enemyList仍然在遍历,但是元素个数却变了,这会导致遍历出错,然后Unity报错。

游戏中自动攻击最近目标、二次连击和群体攻击的大体代码思路相关推荐

  1. 学会查找问题的源头:《全屏游戏中自动切出到桌面的问题解决(二)》

    学会查找问题的源头:<全屏游戏中自动切出到桌面的问题解决(二)> 参考文章: (1)学会查找问题的源头:<全屏游戏中自动切出到桌面的问题解决(二)> (2)https://ww ...

  2. Docker在英雄联盟游戏中的实践探索(二)

    本文讲的是Docker在英雄联盟游戏中的实践探索(二),[编者的话]这篇博客是Riot的Docker实践系列博客的第二篇,主要内容是:基于Cloudbees镜像创建新的Dockerfile,设置了一个 ...

  3. 全屏游戏中自动切出到桌面的问题解决(二)

    关于全屏游戏,类似英雄联盟等,游戏中,自动切到桌面的问题,之前发布过一个解决过的问题.今天又碰到一个类似的问题,当然还是用前端进程工具查找一下什么进程引起的游戏切出.经过观察为update.exe这个 ...

  4. 游戏中的网络同步机制(二) 王者荣耀对帧同步的应用

    转载自:https://www.jianshu.com/p/81050871cce7 参考 解密:腾讯如何打造一款实时对战手游 从<王者荣耀>来聊聊游戏的帧同步 <王者荣耀>技 ...

  5. 全屏游戏中自动切出到桌面的问题解决

    近期遇到一个客户全屏游戏中,自动切出游戏到桌面的问题,于是到现场解决.      打开游戏<英雄联盟>测试,并开启前端进程监测软件监测.一段时间过后,游戏切出,发现一个名称为"D ...

  6. 【iOS-Cocos2d游戏开发之十八】解决滚屏背景/拼接地图有黑边(缝隙)以及禁止游戏中自动锁屏问题!...

    Himi 原创, 欢迎转载,转载请在明显处注明! 谢谢. 原文地址:http://blog.csdn.net/xiaominghimi/article/details/6926913 本章节主要为大家 ...

  7. 【UE4】游戏中近战攻击判定检测(一)——射线检测!

    这篇主要分享一下如何在UE4中实现游戏中的近战攻击判定的方法之一--"射线检测",. 首先来说一下实现的逻辑: 1.我们会在武器上设置若干个射线发射点 2.当我们攻击的时候,游戏中 ...

  8. 多人联机射击游戏中的设计模式应用(二)

          (6) 观察者模式      联机射击游戏可以实时显示队友和敌人的存活信息,如果有队友或敌人阵亡,所有在线游戏玩家将收到相应的消息,可以提供一个统一的中央角色控制类(CenterContr ...

  9. Dota 游戏中的攻击与伤害分析

    摘要:在上一篇文章中分析了物理攻击和护甲的攻防分析,但是忽略了英雄对战里面一个很重要的角色--技能攻击.实际上,除了少数后期英雄可以直接靠平砍(即物理攻击)杀人外,大部分英雄尤其是智力英雄还是要靠技能 ...

最新文章

  1. perl6 中将 字符串 转成十六进制
  2. centos7离线安装mysql_Red Hat6.4离线安装mysql安装手册
  3. 使用 jquery 创建数组
  4. Spring 3整合Quartz 2实现定时任务(转)
  5. Mysql更改表名大小写不敏感
  6. 函数定义的规范-电子书包
  7. Python+OpenGL基本图元绘制综合演示
  8. 2100 反弹shell无法粘贴_技术成长日记-Vim实用技巧-4.6复制/删除/粘贴
  9. 自动选择SVG和VML的WEB页面
  10. 比较全的OA系统功能模块列表
  11. 视频安防监控系统介绍
  12. 编译LineageOS
  13. 中国生活垃圾处理行业十四五规划与投融资模式分析报告2022~2028年
  14. Windows11分辨率无法调整,缩放不能选择调整
  15. aurora_8b10b通信
  16. 解决UnicodeDecodeError: ‘utf-8‘ codec can‘t decode byte 0xc8 in position 0: invalid continuation byte
  17. 计算机进入桌面黑屏怎么办,老司机教你电脑进入系统后黑屏怎么办
  18. BOSS直聘上市背后:招聘新人与行业老炮的终极对决
  19. Python 编写 excel 点名软件
  20. 微信小程序云开发查询数据库结果为空

热门文章

  1. Go语言中list的使用
  2. mp3转成cd专用软件
  3. 【转载】组合模式-系统菜单的设计
  4. 【Android游戏开发十四】深入Animation,在SurfaceView中照样使用Android—Tween Animation!
  5. 电脑打不开网页的解决办法
  6. C#创建文件写入及追加内容
  7. 中国企业直播市场发展趋势
  8. 2023年深圳积分入户考这个软考高级证书错不了!加分真高!
  9. 下列常用的html标记有,html的题库(含答案)
  10. EcoVadis认证评级介绍