码迷,mamicode.com
首页 > 其他好文 > 详细

RPG游戏中如何判断敌人是否在玩家的攻击范围之内

时间:2018-11-30 14:12:55      阅读:159      评论:0      收藏:0      [点我收藏+]

标签:play   范围   temp   player   form   amp   oid   游戏   i++   

 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

RPG游戏中如何判断敌人是否在玩家的攻击范围之内

标签:play   范围   temp   player   form   amp   oid   游戏   i++   

原文地址:https://www.cnblogs.com/luguoshuai/p/10043355.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!