#pragma strict
var radarRadius : float; //雷達圖案的半徑(像素)
var radarDetectionRange : float;//雷達偵測的範圍
var scale : Vector3; //儲存的三維空間,用來計算螢幕的縮放比例
var radar : Texture; //雷達背景
var endPoint : Texture; //目標點的圖片
var myPoint : Texture; //自己的箭頭符號
var playerTransform : Transform;
private var targetTransform : GameObject[]; //儲存標記為敵人的物件
private var rotAngle : float = 0; //圖片旋轉的角度
private var timeSpacer : float; //閃爍的暫存時間
private var percent : float; //距離的百分比
private var angle : float; //圖片要放在雷達上的哪一個角度
private var direction : Vector3;//玩家跟怪物的距離
function Start () {
scale = Vector3(Screen.width / 800.0 , Screen.height /600.0 , 1.0);
playerTransform = GameObject.Find("MainPlayer").transform;
}
function Update () {
this.transform.eulerAngles = Vector3(0,0,0);
/*將這個物體旋轉到世界軸的(0,0,0),
因為我們找角度是從這個物體面向的方向跟目標物體去找的
所以要一直保持著面向上方的位置*/
}
function OnGUI(){
GUI.matrix = Matrix4x4.Scale(scale);
GUI.DrawTexture(Rect(650,0,150,150),radar);
timeSpacer += Time.deltaTime;//閃爍的時間
/*計算出玩家面向的方向
再讓圖片旋轉的角度跟玩家物件的旋轉一致
圖片用完後必須把旋轉歸零不然之後的圖片都會旋轉
GUI.matrix = Matrix4x4.Scale(scale);是歸零的程式碼*/
rotAngle = playerTransform.eulerAngles.y;
GUIUtility.RotateAroundPivot (rotAngle, Vector2(725 * Screen.width / 800.0 ,75 * Screen.height /600.0));
GUI.DrawTexture(Rect(710,60,30,30),myPoint);
GUI.matrix = Matrix4x4.Scale(scale);
/*先找出所有有標記為Enemy的敵人
再去計算每一個人的距離
如果距離小於偵測範圍就讓它顯是在雷達上面*/
targetTransform = GameObject.FindGameObjectsWithTag("Enemy");
for(var enemy : GameObject in targetTransform){
direction = enemy.transform.position - playerTransform.position; //玩家跟怪物的距離
if(direction.magnitude < radarDetectionRange){
if((timeSpacer % 1.8) < 0.9){
percent = direction.magnitude / radarDetectionRange; //算百分比 分子是玩家跟怪物的距離 分母是雷達可以偵測的距離
/*重距離的三維空間中我們可以知道X跟Z 等同於平面的X跟Y
我們由X跟Z用Atan2去求出這個X跟Z比例的角度是多少*/
angle = Mathf.Atan2(direction.x, direction.z) ;
/*我們將X軸加上 Sin(angle)*75
Y軸減掉 Cos(angle)*雷達圖片的半徑)*/
GUI.DrawTexture(Rect(725 + (Mathf.Sin(angle)*percent *radarRadius) , 75 - (Mathf.Cos(angle)*percent *radarRadius) , 10,10) ,endPoint);
}
}
/*下面是如果超過雷達的範圍就讓目標點在雷達的最邊邊顯示,可以用於終點在哪之類的
不要這個功能就註解掉*/
else{
//(這個等同於 direction = nemy.transform.position - playerTransform.position; 玩家跟怪物的距離)
direction = this.transform.InverseTransformPoint(enemy.transform.position);
if(direction.magnitude > 1 && (timeSpacer % 2.5) < 2.3){
angle = Mathf.Atan2(direction.x, direction.z) ;
GUI.DrawTexture(Rect(725 + (Mathf.Sin(angle)*radarRadius) , 75 - (Mathf.Cos(angle)*radarRadius) , 10,10) ,endPoint);
}
}
}
}