Red de conocimientos turísticos - Lugares de interés turístico - ¿Cómo determina Unity si un objeto está dentro del campo de visión de la cámara?

¿Cómo determina Unity si un objeto está dentro del campo de visión de la cámara?

Hay un NPC ejecutándose en la pantalla y se eliminará después de salir de la pantalla.

El problema actual es cómo determinar que el NPC no está dentro del campo de visión de la cámara.

Después de buscar en línea, la respuesta más común es "hay eventos relacionados en el incidente de Unity como referencia", pero no puedo entenderlo.

Algunas personas dicen que nunca se ha intentado proyectar las coordenadas de la pantalla. Intentaré ver la diferencia entre no estar en el campo de visión y ser proyectado en el campo de visión en el futuro.

¿Quién puede decirme un método de juicio simple (por ejemplo, una función en unity puede obtener O(∩_∩)O~)?

¡Muchas gracias!

Suplemento:

El método de colgarse abajo del NPC se puede detectar, pero después de la prueba, solo se puede detectar después de que el NPC se mueve una cierta distancia fuera de la pantalla.

Yo mismo probé un método, usando el mapeo de NPC para las coordenadas de la pantalla para determinar (comparar el ancho y el alto de la pantalla)

Cámara. WorldToScreenPoint(enemy . transform . position)

Screen.width

Alto de la pantalla

Si las coordenadas mapeadas no están en la pantalla, la pantalla es O(∩ _∩) O~

He visto este método ocasionalmente, pero aún no lo he probado. Publíquelo aquí primero.

Una forma de determinar si un objeto está dentro del campo de visión. De hecho, la implementación es muy simple, solo un método API. Este método es OnWillRenderObject(), que se llama cuando el objeto del juego es visible para la cámara en la descripción del documento Unity3D.

Probemos la funcionalidad de este método. Primero cree una nueva escena, coloque un cuadrado y una esfera en la escena y agregue una fuente de luz para facilitar la observación. Estoy usando la versión Unity3D5.0beta. Al crear una nueva escena, se creará una fuente de luz en el grupo de forma predeterminada. Para otras versiones, deberá agregarla usted mismo. Luego, agregue un componente rígido a la esfera. Ejecute la escena y encontrará que la bola caerá bajo la acción de la gravedad, pero el bloque seguirá en su lugar.

Cree un nuevo script de la siguiente manera:

Usar UnityEngine

Clase pública Detectar visión: comportamiento único {

//Pasar Ingrese un referencia a la casilla para su identificación.

Cubo de objetos de juego público;

//Identifica si la esfera está dentro del campo de visión de la cámara.

public bool isRendering = true

Última vez de flotación privada = 0;

hora de corte de flotación privada = 0

Actualización no válida ( )

{

//Comparar registros de tiempo. Si no son iguales, significa que todavía están dentro del campo de visión de la cámara.

isRendering = curtTime! = ¿La última vez? Verdadero: Falso;

if (isRendering)

{

//En el campo de visión, el cuadrado es rojo.

Cubo. get componente()material . color = color .

}

De lo contrario {

//Fuera del campo de visión, el cuadrado se vuelve blanco.

Cubo. get componente()material .color = color white;

}

//Pasa el tiempo actual al registro de tiempo del fotograma anterior.

lastTime = curtTime

}

//Este método se llama si el objeto es visible.

void OnWillRenderObject()

{

//Registra la hora de inicio del fotograma actual.

curtTime = Time.time

}

}

Arrastra el script a la esfera y arrastra el objeto cuboide al script. Al ejecutar el programa, encontramos que el cuadro es rojo al principio.

Cuando la esfera se pierde de vista, el cuadrado se vuelve blanco y el efecto es el siguiente: