unity敌人攻击范围判定

怎么写让怪的攻击判定范围在红线标注的这个九十度里,现在是360

img

img

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/7661866
  • 我还给你找了一篇非常好的博客,你可以看看是否有帮助,链接:Unity 游戏框架搭建 2019 (四十一) 泛型:结构复用利器
  • 您还可以看一下 林剑老师的Unity游戏开发之贪吃蛇小游戏课程中的 课程简介与项目的创建小节, 巩固相关知识点
  • 以下回答来自chatgpt:

    针对该问题,在Unity中可以使用触发器(Trigger)来判定敌人的攻击范围。具体步骤如下:

    1. 在敌人的模型上添加一个圆锥型的Collider,表示攻击范围。

    2. 将Collider的Is Trigger属性设置为True,表示开启Trigger功能。

    3. 在敌人的脚本中编写OnTriggerStay函数,表示当某个物体进入Collider后,每帧都会执行该函数。

    4. 在OnTriggerStay函数中使用Physics.Raycast来检测是否在攻击范围内。

    具体的代码如下:

    using UnityEngine;
    
    public class Enemy : MonoBehaviour
    {
        public float attackRangeAngle = 90f; // 攻击范围角度,可以在Inspector面板中设置
        public float attackRangeDistance = 3f; // 攻击范围距离,可以在Inspector面板中设置
        public LayerMask attackLayer; // 攻击判定的Layer
    
        private void OnTriggerStay(Collider other)
        {
            // 检测是否在攻击范围内
            Vector3 direction = other.transform.position - transform.position;
            float angle = Vector3.Angle(direction, transform.forward);
            float distance = direction.magnitude;
            if (angle < attackRangeAngle / 2 && distance < attackRangeDistance)
            {
                // 在攻击范围内,使用Raycast进行攻击判定
                RaycastHit hit;
                if (Physics.Raycast(transform.position, direction, out hit, attackRangeDistance, attackLayer))
                {
                    // 播放攻击动画等行为
                }
            }
        }
    }
    

    其中,使用Raycast来进行攻击判定,可以设置需要检测碰撞的Layer。如果在攻击判定的Layer内存在物体,则表示攻击到了敌人的目标。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^