掸哑、、憎兽、
using UnityEngine;
using System.Collections;
public class AIBehaver : MonoBehaviour
{
//視野區(qū)域
public float HorSight = 120f;
public float VerSight = 60f;
//視野距離
public float sightDis = 100f;
//目標點
Transform target;
//視野方向
Vector3 leftDir,rightDir,upDir,downDir;
//射線
Ray ray;
void Start()
{
target = GameObject.Find ("Player").transform;
}
void Update()
{
Vector3 tempForward = transform.forward;
//此處是計算相對于this的左右區(qū)域氮墨,必須用transform.up 而不能用vector3.up
//自身為中心,向左旋轉(zhuǎn)視野范圍一半
Quaternion left = Quaternion.AngleAxis(-HorSight/2, transform.up);
//自身為中心复罐,向右旋轉(zhuǎn)視野范圍一半
Quaternion right =Quaternion.AngleAxis(HorSight / 2, transform.up);
//自身為中心,向上旋轉(zhuǎn)視野范圍一半
Quaternion up = Quaternion.AngleAxis(-VerSight / 2, transform.right);
//自身為中心,向下旋轉(zhuǎn)視野范圍一半
Quaternion down = Quaternion.AngleAxis(VerSight / 2, transform.right);
//左邊視野方向
leftDir = left * tempForward;
//右邊視野方向
rightDir = right * tempForward;
//上視野方向
upDir = up * tempForward;
//下視野方向
downDir = down * tempForward;
#region 測試
//左旬薯,藍色
Debug.DrawLine(transform.position, transform.position + leftDir * sightDis, Color.blue);
//右,紅色
Debug.DrawLine(transform.position, transform.position + rightDir * sightDis, Color.red);
//上适秩,白色
Debug.DrawLine(transform.position, transform.position + upDir * sightDis, Color.white);
//下绊序,綠色
Debug.DrawLine(transform.position, transform.position + downDir * sightDis, Color.green);
#endregion
//進入視野距離的時候調(diào)用
if (Vector3.Distance(transform.position,target.position) < sightDis) {
ComputerSight();
}
}
void ComputerSight()
{
Vector3 dir = target.transform.position - transform.position; //求出this 到目標點的方向
//根據(jù)目標點的方向硕舆,求出目標點在水平、豎直方向上的投影
Vector3 targetHorPos = new Vector3(dir.x,leftDir.y, dir.z);//求水平方向投影
Vector3 targetVerPos = new Vector3(upDir.x, dir.y, dir.z);//求豎直方向投影
//叉乘
Vector3 leftCross = Vector3.Cross(targetHorPos,leftDir);
Vector3 rightCross = Vector3.Cross (targetHorPos,rightDir);
Vector3 upCross = Vector3.Cross (targetVerPos, upDir);
Vector3 downCross = Vector3.Cross (targetVerPos, downDir);
if (dir.z > 0)
{
//判斷骤公, 因為使用的是目標點在水平抚官、豎直方向上的投影乘以左右兩個方向,如果在左右兩個方向包含的區(qū)域之內(nèi)阶捆,那么所得向量方向是必然相反的凌节,點乘為負數(shù)
if (Vector3.Dot(leftCross, rightCross) < 0)
{
Debug.Log("在水平視角內(nèi)");
}
if (Vector3.Dot(upCross, downCross) < 0)
{
Debug.Log("在垂直視角范圍內(nèi)");
}
}
}
}
、洒试、倍奢、