zoukankan      html  css  js  c++  java
  • RPG游戏中如何判断敌人是否在玩家的攻击范围之内

     1 // 方式1:通过主角和场景中的所有敌人比较
     2 private void AtkCondition1(float _range,float _angle)
     3 {
     4     // 搜索所有敌人列表(在动态创建敌人时生成的)
     5     // 列表存储的并非敌人的GameObject而是自定义的Enemy类
     6     // Enemy类的一个变量mGameObject则用来存储实例出来的敌人实例
     7     foreach (var go in GameManager.GetInstance.gMonsterDict)
     8     {
     9         // 敌人的坐标向量减去Player的坐标向量的长度(使用magnitude)
    10         float tempDis1 = (go.Value.mGameObject.transform.position - mGameObject.transform.position).magnitude;
    11         // 敌人向量减去Player向量就能得到Player指向敌人的一个向量
    12         Vector3 v3 = go.Value.mGameObject.transform.position - mGameObject.transform.position;
    13         // 求出Player指向敌人和Player指向正前方两向量的夹角,其实就是Player和敌人的夹角(不分左右)
    14         float angle = Vector3.Angle( v3, mGameObject.transform.forward);
    15         if (tempDis1 < _range && angle < _angle)
    16         {
    17             // 距离和角度条件都满足了
    18         }
    19     }
    20 }
    21 // 方式2:通过主角和射线检测到的敌人比较
    22 private void AtkCondition2(float _range,float _angle)
    23 {
    24     // 球形射线检测周围怪物,不用循环所有怪物类列表,无法获取“Enemy”类
    25     Collider[] colliderArr = Physics.OverlapSphere(mGameObject.transform.position, _range, LayerMask.GetMask("Enemy"));
    26     for (int i = 0; i < colliderArr.Length; i++)
    27     {
    28         Vector3 v3 = colliderArr[i].gameObject.transform.position - mGameObject.transform.position;
    29         float angle = Vector3.Angle(v3, mGameObject.transform.forward);
    30         if (angle < _angle)
    31         {
    32             // 距离和角度条件都满足了
    33         }
    34     }
    35 }

    参考:https://blog.csdn.net/chy_xfn/article/details/52512343

  • 相关阅读:
    利息基础理论
    本地数据库
    线上一个数组查询遇到的坑
    老兵的十年职场之路(二)
    老司机心得之时间管理"入坑"
    补习系列(19)-springboot JPA + PostGreSQL
    PostGreSQL(1)-源码安装
    补习系列(18)-springboot H2 迷你数据库
    SpringBoot 2 要不要升级
    补习系列(17)-springboot mongodb 内嵌数据库
  • 原文地址:https://www.cnblogs.com/luguoshuai/p/10043355.html
Copyright © 2011-2022 走看看