个人技术总结————Unity3D中攻击的判断
目录
- 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.参考文献
相关推荐
Unity3D实现攻击范围检测
主要为大家详细介绍了Unity3D实现攻击范围检测,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
unity3d 怪物AI智能攻击源码
unity3d 智能攻击源码,内附带详细注释。 温馨提示:导入unity3d资源包时,路径不能带中文,也不要放桌面。
Unity3D实现的角色攻击、移动待机死亡以及怪物自动寻路AI等(直接Unity运行)
Unity3D实现的角色攻击、移动待机死亡以及怪物自动寻路AI等(直接Unity运行)
Unity3D实现用向量叉乘判断转向
[Unity游戏开发]向量在游戏开发中的应用(三)博客中的案例源码。 本Demo使用的的开发工具是Unity5.0.1f1和VS2013,建议下载源码后用Unity5.0.1f1或者更高的版本打开。 本源码可以配合Sheh伟伟的博客来学习。
unity3d判断鼠标左右滑动,响应不同事件
unity3d判断鼠标左右滑动,响应不同事件


