Display distance in my sniper scope ?

In english

I make a FPS project on Unity.

I add a sniper and i would like see the distance of my ennemi when i use the scope.

Do you know any script for that ?

Thank you

En français

Je suis sur un project de FPS

J’ai ajouté un sniper et je voudrais afficher la distance de mon ennemi quand je zoom dessus.

Connaissez vous un script qui le permettrais?

Merci

English

I would advise to use Raycasting

public new Camera camera ; // Drag & drop the camera of your scene here

private void Start()
{
    // The following lines make sure there is a camera if none has been specified
    if( camera == null )
        camera = Camera.main ;
    if( camera == null )
        camera = FindObjectOfType<Camera>();
}

public float GetDistanceFromTarget()
{
    // Cast a ray from the center of the screen
    Ray ray = camera.ViewportPointToRay( new Vector3(0.5f, 0.5f, 0) );
    RaycastHit hit;
    if (Physics.Raycast(ray, out hit))
        return hit.distance ;
    else
        return Mathf.Infinity;
    // or shorter version :
    // return Physics.Raycast(ray, out hit) ? hit.distance : Mathf.Infinity ;
}

If you want this method to work, your ennemies and the elements in your scene must have a collider.


Français

L’utilisation de la technique de Raycasting me semble la plus appropriée

public new Camera camera ; // Glisser et déposer la caméra de la scène dans l'inspecteur

private void Start()
{
    // Les lignes suivantes permettent de récupérer une caméra dans la scène si aucune n'a été spécifiée
    if( camera == null )
        camera = Camera.main ;
    if( camera == null )
        camera = FindObjectOfType<Camera>();
}

public float GetDistanceFromTarget()
{
    // Lancer de rayon depuis le centre de l'écran
    Ray ray = camera.ViewportPointToRay( new Vector3(0.5f, 0.5f, 0) );
    RaycastHit hit;
    if (Physics.Raycast(ray, out hit))
        return hit.distance ;
    else
        return Mathf.Infinity;
    // Version plus concise :
    // return Physics.Raycast(ray, out hit) ? hit.distance : Mathf.Infinity ;
}

Évidemment, pour que cette technique marche, il sera nécessaire que les ennemis (et les éléments de décor) soient munis d’une boite de collision.

Thank you for all your answer.

I will test all that.

Are you trying to zoom in on the enemy? If so, you would do something like this.

public Camera playerCamera; 
private bool isZoomed = false; 

void Start() {
playerCam camera = GetComponent<fieldOfView>(); 
}

void Update () {
       if (Input.GetButtonDown("FIre2")) {
                isZoomed = !isZoomed; 
                playerCam = 40; 
                
       }
}

If this does not work try doing the “Snipe scope effect” video on YouTube by brackeys.