在遊戲設計中,有的技能的攻擊範圍是一個扇形,判斷場景中的怪物是否在扇形範圍內,我們可以理解具體思路:
首先,判斷該目標點與技能釋放者的距離是否小於扇形的半徑;
其次目標點與技能釋放者面對的方向向量夾角是否小於扇形角度的二分之一;
如上圖所示,1爲技能釋放者,2爲目標點
代碼如下:
using UnityEngine;
using System.Collections;
public class TestTrans : MonoBehaviour
{
public Transform Target;
private float SkillDistance = 5;//扇形距離
private float SkillJiaodu = 60;//扇形的角度
void LateUpdate()
{
float distance = Vector3.Distance(transform.position, Target.position);//距離
Vector3 norVec = transform.rotation * Vector3.forward * 5;//此處*5只是爲了畫線更清楚,可以不要
Vector3 temVec = Target.position - transform.position;
Debug.DrawLine(transform.position, norVec, Color.red);//畫出技能釋放者面對的方向向量
Debug.DrawLine(transform.position, Target.position, Color.green);//畫出技能釋放者與目標點的連線
float jiajiao = Mathf.Acos(Vector3.Dot(norVec.normalized, temVec.normalized)) * Mathf.Rad2Deg;//計算兩個向量間的夾角
if (distance < SkillDistance)
{
if (jiajiao <= SkillJiaodu * 0.5f)
{
Debug.Log("在扇形範圍內");
}
}
}
}
這裏要說明的是:
1.norVec.normalized 和
temVec.normalized 表示的是兩個向量的單位向量, 因爲在公式裏,有向量和模的除法,得出來的結果就是單位向量,所以我們這裏和後面都直接用單位向量來計算,省去不少麻煩。
2.Mathf.Rad2Deg表示的是 單位弧度的度數。
其中的一些計算公式參照下面的文章鏈接