简体   繁体   中英

How to make a smooth crosshair in Unity3D?

In Unity 3D I'd like to create a crosshair for my top-down 2D-shooter that gradually moves to its target whenever the player has the same x-position as the target.

The problem is that I want a smooth animation when the crosshair moves to the target. I have included a small gif from another game that shows a crosshair I'd like to achieve. Have a look at it:

Crosshair video

I tried to do that with the following script but failed - the crosshair jumps forth and back when the enemies appear. It doesn't look so smooth like in the video I mentioned above.

The following script is attached to the player:

[SerializeField]
private GameObject crosshairGO;
[SerializeField]
private float speedCrosshair = 100.0f;

private Rigidbody2D crosshairRB;
private bool crosshairBegin = true;

void Start () {

crosshairRB = crosshairGO.GetComponent<Rigidbody2D>();
crosshairBegin = true;
}


void FixedUpdate() {
    //Cast a ray straight up from the player
    float _size = 12f;
    Vector2 _direction = this.transform.up;
    RaycastHit2D _hit = Physics2D.Raycast(this.transform.position, _direction, _size);

    if (_hit.collider != null && _hit.collider.tag == "EnemyShipTag") {
        // We touched something!
        Debug.Log("we touched the enemy");
    
        Vector2 _direction2 = (_hit.collider.gameObject.transform.position - crosshairGO.transform.position).normalized;
        crosshairRB.velocity = new Vector2(this.transform.position.x, _direction2.y * speedCrosshair);
        crosshairBegin = false;
    } else {
        // Nothing hit
        Debug.Log("nothing hit");
        crosshairRB.velocity = Vector2.zero;
        Vector2 _pos2 = new Vector2(this.transform.position.x, 4.5f);
        if (crosshairBegin) crosshairGO.transform.position = _pos2;
    }
}

I think you need create a new variable call Speed translation with speed = distance from cross hair to enemy position / time (here is Time.fixedDeltaTime);

then multiply speed with velocity, the cross hair will move to enmey positsion in one frame. but you can adjust speed by mitiply it with some float > 0 and < 1;

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM