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

222100220陈鑫 222100220陈鑫 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区

目录

  • 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文档

...全文

相关推荐

评论
收藏 已收藏
分享
返回顶部