1. 程式人生 > >RPG遊戲中如何判斷敵人是否在玩家的攻擊範圍之內

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