Unity 3D Games – Video Surveillance – CCTV Camera – JS Script

1. Inserire il modello 3D della camera di sorveglianza nella scena
2. Imparentare come figlio un oggetto con un ‘Mesh Collider’ come ‘Trigger’ a piramide che simula l’area di visione della camera.
3. Gestisce la collisione tra il ‘Playe’r e il ‘Trigger’ assegnado al ‘Mesh Collider’:


#pragma strict

private var player : GameObject;                                // Reference to the player. Assegnare in Inspector l'oggetto da rilevare
private var lastPlayerSighting : LastPlayerSighting;            // Reference to the global last sighting of the player.


function Awake ()
{
    // Setting up the references.
    // Rileva l'oggetto Player in base al tag -player-
    player = GameObject.FindGameObjectWithTag(Tags.player); 
    // Rileva l'oggetto Game Controller in base al tag -gameControllerr- e ottiene lo script LastPlayerSighting
    lastPlayerSighting = GameObject.FindGameObjectWithTag(Tags.gameController).GetComponent(LastPlayerSighting);
}


function OnTriggerStay (other : Collider)
{
    // If the colliding gameobject is the player...
    // Se collide l'oggetto player...
    if(other.gameObject == player)
    {
        // ... raycast from the camera towards the player.
        // Emetti Raycast, in questo modo il plyaer viene rilevato solo se si trova di fronte alla camera
        // CONSIDERAZIONE: come soluzione semplificata avrei creato un piccolo 'Mesh Collider' a forma di cubo per simulare il RayCast,
        // avrei risolto tutto con una sola collisione, risparmiando il calcolo Raycasting!
        var relPlayerPos : Vector3 = player.transform.position - transform.position;
        var hit : RaycastHit;
        
        if(Physics.Raycast(transform.position, relPlayerPos, hit))
            // If the raycast hits the player...
            // se il Raycast colpisce il player
            if(hit.collider.gameObject == player)
                // ... set the last global sighting of the player to the player's position.
                // fai partire l'allarme
                lastPlayerSighting.position = player.transform.position;
    }
}

CONSIDERAZIONE E OTTIMIZZAZIONE: come soluzione semplificata avrei creato un piccolo ‘Mesh Collider’ a forma di cubo per simulare il RayCast, avrei risolto tutto con una sola collisione, risparmiando il calcolo Raycasting!