如何在Unity 3D中创建Ofscreen Enemy指标?

DJ *_*JIV 5 unity-game-engine

我正在使用下面链接中提到的教程创建一个Ofscreen Enemy指标.但是我可以让指示器旋转指向敌人,但指示器不会从屏幕的一端移动到另一端.

http://gamedevelopment.tutsplus.com/tutorials/positioning-on-screen-indicators-to-point-to-off-screen-targets--gamedev-6644

这是期望的结果:

期望的结果

到现在为止我已经设法弄清楚以下请帮助.

var screenCenter:Vector3 = new Vector3(0.5, 0.5, 0f);
    //Note coordinates are translated
    //Make 00 the  centre of the screen instead of bottom left
    screenpos -= screenCenter;

    //find angle from center of screen instead of bototom left
    var angle:float = Mathf.Atan2(screenpos.y, screenpos.x);
    angle -= 90 * Mathf.Deg2Rad;

    var cos:float = Mathf.Cos(angle);
    var sin:float = -Mathf.Cos(angle);

    screenpos = screenCenter + new Vector3(sin*150, cos*150, 0);

    //y=mx + b format
    var m:float = cos/sin;
    var ScreenBounds:Vector3 = screenCenter;// * 0.9f;

    //Check up and down first
    if(cos > 0){
        screenpos = new Vector3(ScreenBounds.y/m, ScreenBounds.y, 0);
    }else{//down
        screenpos = new Vector3(-ScreenBounds.y/m, -ScreenBounds.y, 0);
    }
    //If out of bound then get point on appropriate side
    if(screenpos.x > ScreenBounds.x){//Out of bound must be on right
        screenpos = new Vector3(ScreenBounds.x, ScreenBounds.y*m, 0);
    }else if(screenpos.x < ScreenBounds.x){//Out of bound must be on left
        screenpos = new Vector3(-ScreenBounds.x, -ScreenBounds.y*m, 0);
    }
    //Remove the co ordinate translation
    screenpos += screenCenter;
    var DistanceIndicatorRectT = DistanceIndicator.GetComponent(RectTransform);
    DistanceIndicatorRectT.localPosition = new Vector3(screenpos.x * scrWidth/2, screenpos.y * scrHeight/2, DistanceIndicatorRectT.localPosition.z * screenpos.z);
    DistanceIndicator.transform.rotation = Quaternion.Euler(0, 0, angle*Mathf.Rad2Deg);
Run Code Online (Sandbox Code Playgroud)

cah*_*hen 2

创建一个矩形框碰撞器来界定屏幕边界,并在敌人的方向上使用Physics2D.Raycast 。

碰撞点会告诉您需要在哪里绘制绿色箭头。