Working Radar Script or Mini Map Solution for iPhone?

Hello,
now i try the Radar Script from the Wiki but i get some errors…
here is the Code:

function drawBlip(go,aTexture){
    
    centerPos=centerObject.position;
    extPos=go.transform.position;
    
    // first we need to get the distance of the enemy from the player
    dist=Vector3.Distance(centerPos,extPos);
     
    dx=centerPos.x-extPos.x; // how far to the side of the player is the enemy?
    dz=centerPos.z-extPos.z; // how far in front or behind the player is the enemy?
    
    // what's the angle to turn to face the enemy - compensating for the player's turning?
    deltay=Mathf.Atan2(dx,dz)*Mathf.Rad2Deg - 270 - centerObject.eulerAngles.y;
    
    // just basic trigonometry to find the point x,y (enemy's location) given the angle deltay
    bX=dist*Mathf.Cos(deltay * Mathf.Deg2Rad);
    bY=dist*Mathf.Sin(deltay * Mathf.Deg2Rad);
    
    bX=bX*mapScale; // scales down the x-coordinate by half so that the plot stays within our radar
    bY=bY*mapScale; // scales down the y-coordinate by half so that the plot stays within our radar
    
    if(dist<=200){ 
        // this is the diameter of our largest radar circle
       GUI.DrawTexture(Rect(mapCenter.x+bX,mapCenter.y+bY,2,2),aTexture);
    }
}

:arrow: extPos=go.transform.position; -this line makes the trouble…
… and i can’t figure it out :frowning:

btw. is there a maybe better solution for a radar ?
many many thanx
kerstin :sweat_smile:

On the iphone you should declare all variables with a static type. The compiler can usually figure it out, but not always.

hi muckel, can u pls send me the entire code for the turning angle thing pls i am in trouble pls help me out

hi Muckel,
i got the stuff rotating working no need to send the code. thanks for the support.

Hi,
well here is the working Radar Script for iPhone…
There is one line that need’s optimization … or maybe someone can do this with SpriteUI ? Well i would be happy to see that… :slight_smile:

So here is the Script if someone else need this…
if you make optimizations plz post it here in the treat !

@script ExecuteInEditMode()

// radar! by PsychicParrot, adapted from a Blitz3d script found in the public domain online somewhere ..
//

public var blip : Texture;
public var radarBG : Texture;

public var centerObject : Transform;
public var mapScale = 0.3;
public var mapCenter = Vector2(50,50);
public var maxDist = 200;
public var Enemy : String = Enemy;

    function OnGUI() 
    {
        DrawBlipsFor();        
    }
     
    function DrawBlipsFor()
    {
        
         // Find all game objects with tag 
         var gos : GameObject[];
		gos = GameObject.FindGameObjectsWithTag(Enemy); // for this we need a better solution maybe SpriteUI can do this plz help  post in forum. thx
         
        // Iterate through them
				    for (var go : GameObject in gos)  {
				    	drawBlip(go,blip);
				    }
				}
 
    function drawBlip(go : GameObject, aTexture : Texture )
    {
        centerPos=centerObject.position;
        extPos=go.transform.position;
        
        // first we need to get the distance of the enemy from the player
         dist=Vector3.Distance(centerPos,extPos);
         
         dx=centerPos.x-extPos.x; // how far to the side of the player is the enemy?
         dz=centerPos.z-extPos.z; // how far in front or behind the player is the enemy?
        
        // what's the angle to turn to face the enemy - compensating for the player's turning?
         deltay=Mathf.Atan2(dx,dz)*Mathf.Rad2Deg - 270 - centerObject.eulerAngles.y;
        
        // just basic trigonometry to find the point x,y (enemy's location) given the angle deltay
         bX=dist*Mathf.Cos(deltay * Mathf.Deg2Rad);
         bY=dist*Mathf.Sin(deltay * Mathf.Deg2Rad);
        
        bX=bX*mapScale; // scales down the x-coordinate by half so that the plot stays within our radar
        bY=bY*mapScale; // scales down the y-coordinate by half so that the plot stays within our radar
        
        if(dist<= maxDist)
        { 
            // this is the diameter of our largest radar circle
           GUI.DrawTexture(new Rect(mapCenter.x+bX,mapCenter.y+bY,4,4),aTexture);
        }
     
    }

Following script wors for me very good, its also from the wiki:

@script ExecuteInEditMode()
// radar! by PsychicParrot, adapted from a Blitz3d script found in the public domain online somewhere ..

//Modified by Dastardly Banana to add radar size configuration, different colors for enemies in different states (patrolling or chasing), ability to move radar to either one of 9 preset locations or to custom location.

//some lines are particular to our AI script, you will need to change "EnemyAINew" to the name of your AI script, and change "isChasing" to the boolean within that AI script that is true when the enemy is active/can see the player/is chasing the player.

var blip : Texture; // texture to use when the enemy isn't chasing
var blipChasing : Texture; //When Chasing
var radarBG : Texture;

var centerObject : Transform;
var mapScale = 0.3;
var mapSizePercent = 15;

var checkAIscript : boolean = true;
var enemyTag = "Enemy";

enum radarLocationValues {topLeft, topCenter, topRight, middleLeft, middleCenter, middleRight, bottomLeft, bottomCenter, bottomRight, custom}
var radarLocation : radarLocationValues = radarLocationValues.bottomLeft;

private var mapWidth : float;
private var mapHeight : float;
private var mapCenter : Vector2;
var mapCenterCustom : Vector2;

function Start () {
    setMapLocation();   
}

function OnGUI () {
//  GUI.matrix = Matrix4x4.TRS (Vector3.zero, Quaternion.identity, Vector3(Screen.width / 600.0, Screen.height / 450.0, 1));
	GUI.color.a = 0.4;
	
    // Draw player blip (centerObject) ???
    //bX=centerObject.transform.position.x * mapScale;
    //bY=centerObject.transform.position.z * mapScale;
    
     // Draw player blip (centerObject)
    GUI.DrawTexture(Rect(mapCenter.x-2.5,mapCenter.y-2.5,5,5),blip);
    
    //Draw Map   
    GUI.DrawTexture(Rect(mapCenter.x - mapWidth/2,mapCenter.y-mapHeight/2,mapWidth,mapHeight),radarBG);
   
    // Draw blips for Enemies
    DrawBlipsForEnemies();
    

   
}
 

function drawBlip(go : GameObject, aTexture){
   
    centerPos=centerObject.position;
    extPos = go.transform.position;
   
    // first we need to get the distance of the enemy from the player
    dist=Vector3.Distance(centerPos,extPos);
    
    dx=centerPos.x-extPos.x; // how far to the side of the player is the enemy?
    dz=centerPos.z-extPos.z; // how far in front or behind the player is the enemy?
   
    // what's the angle to turn to face the enemy - compensating for the player's turning?
    deltay=Mathf.Atan2(dx,dz)*Mathf.Rad2Deg - 270 - centerObject.eulerAngles.y;
   
    // just basic trigonometry to find the point x,y (enemy's location) given the angle deltay
    bX=dist*Mathf.Cos(deltay * Mathf.Deg2Rad);
    bY=dist*Mathf.Sin(deltay * Mathf.Deg2Rad);
   
    bX=bX*mapScale; // scales down the x-coordinate so that the plot stays within our radar
    bY=bY*mapScale; // scales down the y-coordinate so that the plot stays within our radar
   
    if(dist<=mapWidth*.5/mapScale){
        // this is the diameter of our largest radar circle
       GUI.DrawTexture(Rect(mapCenter.x+bX,mapCenter.y+bY,4,4),aTexture);
 
    }
 
}

 
function DrawBlipsForEnemies(){
    //You will need to replace isChasing with a variable from your AI script that is true when     the enemy is chasing the player, or doing watever you want it to be doing when it is red on    the radar.
   
    //You will need to replace "EnemyAINew with the name of your AI script
   
    // Find all game objects tagged Enemy
    var gos : GameObject[];
	gos = GameObject.FindGameObjectsWithTag("Enemy");
    //print("gos= "+gos);
 	
    var distance = Mathf.Infinity;
    var position = transform.position;
 
    // Iterate through them and call drawBlip function
    for (var go : GameObject in gos)  {
          var blipChoice : Texture = blip;
          //if(checkAIscript){
              //var aiScript : EnemyAI = go.GetComponent("EnemyAI");
           	  //if(aiScript.isChasing)
                   // blipChoice = blipChasing;
        	//}
        drawBlip(go,blipChoice);
    }
 
}

function setMapLocation () {
    mapWidth = Screen.width*mapSizePercent/100.0;
    mapHeight = mapWidth;

    //sets mapCenter based on enum selection
    if(radarLocation == radarLocationValues.topLeft){
        mapCenter = Vector2(mapWidth/2, mapHeight/2);
    } else if(radarLocation == radarLocationValues.topCenter){
        mapCenter = Vector2(Screen.width/2, mapHeight/2);
    } else if(radarLocation == radarLocationValues.topRight){
        mapCenter = Vector2(Screen.width-mapWidth/2, mapHeight/2);
    } else if(radarLocation == radarLocationValues.middleLeft){
        mapCenter = Vector2(mapWidth/2, Screen.height/2);
    } else if(radarLocation == radarLocationValues.middleCenter){
        mapCenter = Vector2(Screen.width/2, Screen.height/2);
    } else if(radarLocation == radarLocationValues.middleRight){
        mapCenter = Vector2(Screen.width-mapWidth/2, Screen.height/2);
    } else if(radarLocation == radarLocationValues.bottomLeft){
        mapCenter = Vector2(mapWidth/2, Screen.height - mapHeight/2);
    } else if(radarLocation == radarLocationValues.bottomCenter){
        mapCenter = Vector2(Screen.width/2, Screen.height - mapHeight/2);
    } else if(radarLocation == radarLocationValues.bottomRight){
        mapCenter = Vector2(Screen.width-mapWidth/2, Screen.height - mapHeight/2);
    } else if(radarLocation == radarLocationValues.custom){
        mapCenter = mapCenterCustom;
    }
   
}

regards