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!