how indicators move along the screen borders

I desperately need an idea for this.
In my game, enemies move around out of screen. I’d like to show indicators pointing at these enemies, moving along the screen borders no matter where enemies move. Problem is that I also move around, which means my position(x, y) keeps changing as well as enemies’. Just like ‘Missiles’ app.
It’s so hard for me to keep indicators along the borders, following the enemies.
I wouldn’t be so smart to figure this out. I hope my english is understandable. Can anyone give me some advice?

Hey @mhhk88 ,
Have you tried to use Camera.main.worldPointToScreenPoint() function?
Then you just need to draw an arrow along the line that goes from the screen center, to that point.
You can get the intersection of that line with the screen border.
Hope it helps~

Attach this script to the object you want to track.

public Texture2D icon; //The icon. Preferably an arrow pointing upwards.
 public float iconSize = 50f;
 [HideInInspector]
 public GUIStyle arrow; //GUIStyle to make the box around the icon invisible. Public so that everything has the default stats.
 Vector2 indRange;
 float scaleRes = Screen.width/200; //The width of the screen divided by 500. Will make the GUI automatically
 //scale with varying resolutions.
 Camera cam;
 public bool visible = false; //Whether or not the object is visible in the camera.
 
 void Start () {
     visible = GetComponent<SpriteRenderer> ().isVisible;
 
     cam = Camera.main; //Don't use Camera.main in a looping method, its very slow, as Camera.main actually
     //does a GameObject.Find for an object tagged with MainCamera.
 
     indRange.x = Screen.width - (Screen.width / 6);
     indRange.y = Screen.height - (Screen.height / 7);
     indRange /= 2f;
 
     arrow.normal.textColor = new Vector4 (0, 0, 0, 0); //Makes the box around the icon invisible.
 
 }
 
 void OnGUI () {
     if (visible) {
         Vector3 dir = transform.position - cam.transform.position;
         dir = Vector3.Normalize (dir);
         dir.y *= -1f;
 
         Vector2 indPos = new Vector2 (indRange.x * dir.x, indRange.y * dir.y);
         indPos = new Vector2 ((Screen.width / 2) + indPos.x,
             (Screen.height / 2) + indPos.y);
 
         Vector3 pdir = transform.position - cam.ScreenToWorldPoint(new Vector3(indPos.x, indPos.y,
             transform.position.z));
         pdir = Vector3.Normalize(pdir);
 
         float angle = Mathf.Atan2(pdir.x, pdir.y) * Mathf.Rad2Deg;
 
         GUIUtility.RotateAroundPivot(angle, indPos); //Rotates the GUI. Only rotates GUI drawn after the rotate is called, not before.
         GUI.Box (new Rect (indPos.x, indPos.y, scaleRes * iconSize, scaleRes * iconSize), icon,arrow);
         GUIUtility.RotateAroundPivot(0, indPos); //Rotates GUI back to the default so that GUI drawn after is not rotated.
     }
 }
 
 public void OnBecameInvisible() {
     visible = false;
 }
 //Turns off the indicator if object is onscreen.
 public void OnBecameVisible() {
     visible = true;
 }