Unity模块代码——检测到敌方发射射线

适用场景:

  无人机向前飞行同时探测,在探测区域内检测到了带有指定标记的敌方,则向敌方发射射线

实现思想:

  结合射线Ray功能,判断后发射

两个关键点需要注意下:
  1.传入DetectEnemy的对象才是具有探测能力的,也就是主动发射射线的一方
  2.本程序中将检测的敌人的layer设置为enemy_thing,可根据实际情况修改也可删除

代码如下:

	public float EyeViewDistance = 500; //视野距离
    public float viewAngle = 500f; //视野角度
    private Collider[] SpottedEnemies; //附近的敌人
    // 传入的detector_uav就是具有探测功能的对象
    void DetectEnemy(GameObject detector_uav)  //探测敌人
    {
        //OverlapSphere内的敌人
        // 设定敌人有指定的layer:enemy_thing,只有碰到该layer才会发射射线
        SpottedEnemies = Physics.OverlapSphere(detector_uav.transform.position, EyeViewDistance, LayerMask.GetMask("enemy_thing"));
        for (int i = 0; i < SpottedEnemies.Length; i++) //检测每一个敌人是否在视野区中
        {
            Vector3 EnemyPosition = SpottedEnemies[i].transform.position; //敌人的位置

            if (Vector3.Angle(detector_uav.transform.forward, EnemyPosition - detector_uav.transform.position) <= viewAngle / 2)  //这个敌人是否在视野内
            {
                //如果在视野内
                RaycastHit info = new RaycastHit();
                // 设定敌人有指定的layer:enemy_thing,只有碰到该layer才会发射射线
                int layermask = LayerMask.GetMask("enemy_thing"); //指定射线碰撞的对象
                Physics.Raycast(detector_uav.transform.position, EnemyPosition - detector_uav.transform.position, out info, EyeViewDistance, layermask); //向敌人位置发射射线
                if (info.collider == SpottedEnemies[i]) //如果途中无其他障碍物,那么射线就会碰撞到敌人
                {
                    Debug.DrawRay(detector_uav.transform.position, EnemyPosition - detector_uav.transform.position, Color.yellow); //玩家位置到敌人位置的向量
                    DiscoveredEnemy(SpottedEnemies[i]);
                }
            }
        }
    }
    void DiscoveredEnemy(Collider Enemy) //发现敌人
    {
        //Do something
        Debug.Log("发现敌军:" + Enemy.gameObject.name);
		/*
			可增加后序发现敌军的相关操作
		*/
    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值