unity中玩家扇形攻击范围

12 篇文章 0 订阅

unity中玩家扇形攻击范围

在unity rpg游戏中,经常会有主角或者Boss什么的会发动技能攻击,除了有攻击的距离以外,肯定会有攻击的扇形范围。本篇博客就给大家简单的讲解一下范围。

这里写图片描述
这个是出来60度角的视线范围,在主角的60度角里面,可以去判断是否可以发动攻击,并且用射线来检测target是否在范围之内。

检测扇形角度

这里用了两条Debug.DrawLine来绘制两条红色的线,用来显示所在的区域。


        //检测扇形角度

        float distance = Vector3.Distance(target.transform.position, transform.position);

        Quaternion right = transform.rotation * Quaternion.AngleAxis(30, Vector3.up);
        Quaternion left = transform.rotation * Quaternion.AngleAxis(30, Vector3.down);

        Vector3 n = transform.position + (Vector3.forward * distance);
        Vector3 leftPoint = left * n;
        Vector3 rightPoint = right * n;

        Debug.DrawLine(transform.position, leftPoint, Color.red);
        Debug.DrawLine(transform.position, rightPoint, Color.red);

攻击检测

检测的代码还是很少的,先贴出来


        Vector3 targetDir = target.transform.position - transform.position;
        Vector3 forward = transform.forward;
        float angle = Vector3.Angle(targetDir, forward);
        if (angle < 30.0f)
        {
            //攻击代码
        }

targetDir 指的是目标方向, 而forward 是指的是玩家朝着的方向,在范围为30度的大小里面就可以发动攻击了。
把这段代码放在Update()里面调用就可以了,就可以出现主角攻击的范围在正向60度的样子了
这里写图片描述

  • 12
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
判断敌人是否在攻击范围内,可以通过以下两种方式实现: 1. **圆形攻击范围判断**:可以通过计算敌人与玩家之间的距离,来判断敌人是否在攻击范围内。如果敌人与玩家之间的距离小于等于攻击范围半径,就认为敌人在攻击范围内。 代码示例: ```csharp public float attackRange; // 攻击范围半径 public Transform player; // 玩家 void Update() { // 计算敌人与玩家之间的距离 float distance = Vector3.Distance(transform.position, player.position); // 判断敌人是否在攻击范围内 if (distance <= attackRange) { // 在攻击范围内,进行攻击 Attack(); } } ``` 2. **扇形攻击范围判断**:可以通过计算敌人与玩家之间的距离和夹角,来判断敌人是否在攻击范围内。如果敌人与玩家之间的距离小于等于攻击范围半径,且敌人与玩家之间的夹角小于等于攻击范围角度的一半,就认为敌人在攻击范围内。 代码示例: ```csharp public float attackRange; // 攻击范围半径 public float attackAngle; // 攻击范围角度 public Transform player; // 玩家 void Update() { // 计算敌人与玩家之间的距离 float distance = Vector3.Distance(transform.position, player.position); if (distance <= attackRange) { // 计算敌人与玩家之间的夹角 Vector3 direction = player.position - transform.position; float angle = Vector3.Angle(transform.forward, direction); // 判断敌人是否在攻击范围内 if (angle <= attackAngle / 2f) { // 在攻击范围内,进行攻击 Attack(); } } } ``` 需要注意的是,以上代码示例仅供参考,具体实现还需要根据游戏需求进行调整和优化。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值