天天看點

Unity檢測目标點是否在扇形攻擊範圍内

在遊戲設計中,有的技能的攻擊範圍是一個扇形,判斷場景中的怪物是否在扇形範圍内,我們可以了解具體思路:

首先,判斷該目标點與技能釋放者的距離是否小于扇形的半徑;

其次目标點與技能釋放者面對的方向向量夾角是否小于扇形角度的二分之一;

Unity檢測目标點是否在扇形攻擊範圍内

如上圖所示,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表示的是 機關弧度的度數。

其中的一些計算公式參照下面的文章連結

繼續閱讀