个人技术总结————Unity3D中攻击的判断

222100220陈鑫 2024-06-06 22:16:00

目录

  • 1.技术概述
  • 2.技术详述
  • 3.技术使用中遇到的问题和解决过程
  • 4.总结
  • 5.参考文献

1.技术概述

在unity中攻击的判断有多种的方式,本文中攻击通常的ARPG中的攻击和释放技能,通过产生对应的Prefab,利用Prefab的collider来进行碰撞判断,并触发Prefab上的攻击方法,对受碰撞体进行伤害判断,通过修改Prefab上Mesh来优化的攻击的判断范围,实现攻击特效和判断的分离

2.技术详述

首先是在触发攻击时在合适的位置产生对应的攻击组件,如刀光,火球,并让其有正确的速度和生命周期。


 public void CastBoss1Atk()
 {
     // 获取角色当前位置和朝向
     Vector3 spawnPosition = transform.position + transform.forward * 2.0f + Vector3.up;
     Quaternion spawnRotation = transform.rotation; // 角色当前朝向 

     // 实例化预制件
     StartCoroutine(CreateAfterDelay(Atk, 0.8f, spawnPosition, spawnRotation));

   
     StartCoroutine(DestroyAfterDelay(Atk, 1f)); // 
 }

 IEnumerator CreateAfterDelay(GameObject obj, float delay, Vector3 spawnPosition, Quaternion spawnRotation)
 {
     yield return new WaitForSeconds(delay);
     obj = Instantiate(Boss1AtkPrefab, spawnPosition, spawnRotation);
 }

 IEnumerator DestroyAfterDelay(GameObject obj, float delay)
 {
     yield return new WaitForSeconds(delay);
     Destroy(obj);
 }

之后是碰撞到指定类型的对象时,触发OnTriggerEnter()来进行攻击判断

 if (Time.time - lastAttackTime >= attackInterval && collider.gameObject.tag.Equals("Player"))
 {
     // 进行攻击交互
     Debug.Log(collider.gameObject.name);
     attackCtl.DoAttack(collider.gameObject, 1);

     lastAttackTime = Time.time;
 }

同时可以在这个阶段加入火球爆炸等二次伤害,使用Physics.OverlapSphere()来进行球形的范围判断,也可以进行伤害延迟触发,保证与动画同步,以此来保证游玩的手感

3.技术使用中遇到的问题和解决过程

有时碰撞后无法造成伤害,解决过程:确保一设置敌方的tag和layer属性,同时要避免重复设置layer属性;

4.总结

这种攻击触发的判断方式优点在于对单次攻击的资源消耗较少,也可以通过提前加载Prefab的方式进行优化,但对与持续伤害的判断,由于collider始终处于触发阶段,资源占有率较高,要合理选择不同的攻击判断方式

5.参考文献

unity文档

...全文
429 回复 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

122

社区成员

发帖
与我相关
我的任务
社区描述
FZU-SE
软件工程 高校
社区管理员
  • LinQF39
  • 助教-吴可仪
  • 一杯时间
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧