Unity教程:扇形判断

2025.12.19

本文将会向你介绍一种扇形判断的方法,这种方法将会用于实体检测,假设你的玩家拥有一把近战武器,并且想要去使用近战武器攻击敌人,此时你需要考虑到扇形判断。

Example

本教程具体给你讲述算法实现,而不是直接套用的模板,如果你需要一个模板,请等我完成整个游戏之后检查我的GitHub主页,随缘更新,主要是完成整个作品难度有些高。:)

在写代码之前,我们思考一下你高中所学的内容,cos夹角等于向量相乘/向量的模相乘,所以我们可以通过两条向量求出夹角,以此与我们事先定义好的范围做出对比,如果符合我们的数值,那么攻击有效,否则攻击无效。听上去很简单吧,接下来我们进行实战。

C#代码块

                                    
1| public float Attack_R;//设置攻击的半径:R
2| public float AttackAngle;//设置临界角度
                                    
                                

这部分很简单,我们需要设置一个半径和角度去确定敌人是否在范围之内。

接下来我们需要先获取所有在半径内的敌人,然后再去判断是否在角度范围内,因此接下来我会定义一个HurtEnemy方法,在这里面会去判断敌人是否在半径和角度范围内,同时我会定义一个GetTwoAngle方法,获取二者角度(指的是玩家鼠标位置到敌人之间的夹角)

C#代码块

                                    
1| void HurtEmey()
2| {
3|    Collider2D[] colliders = Physics2D.OverlapCircleAll(PlayerScript.PlayerTran.position,Attack_R,targetLayers);//获取在半径内的实体
4|   foreach(Collider2D emeHit in colliders)//遍历所有在范围的对象
5|    {
6|        float CurrAngle = GetTwoAngle(emeHit.transform.position);//获取在角度范围内的实体
7|        if (CurrAngle <= AttackAngle / 2f)//如果小于目标角度的一半,那么判断成功
8|        {
9|            //攻击成功
10|        }
11|    }
12| }
                                    
                                

这里我们使用了Physics2D.OverlapCircleAll方法去获取在半径内的所有实体,然后通过foreach循环去遍历这些实体,接着调用GetTwoAngle方法获取玩家与敌人之间的夹角,最后进行判断,如果小于我们定义好的角度的一半,那么攻击成功。

C#代码块

                                    
1| public float GetTwoAngle(Vector3 positionB)//计算角色到敌人之间的夹角
2|    {
3|        float angle;
4|        Vector2 mouseDir = (PlayerScript.mousePosition - PlayerScript.PlayerTran.position).normalized;//以玩家作为中心点,获取鼠标方向的向量
5|        Vector2 dir = (positionB - PlayerScript.PlayerTran.position).normalized;//获取玩家到敌人的方向向量
6|        angle = Vector2.Angle(mouseDir,dir);//计算二者夹角
7|        return angle;
8|    }
                                    
                                

这里我们定义了一个GetTwoAngle方法,传入敌人的位置,然后获取玩家到鼠标的方向向量和玩家到敌人的方向向量,最后通过Vector2.Angle方法获取二者夹角并返回。

好了,以上就是本文的全部内容,希望对你有所帮助,祝你编程愉快!:)