Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

432
Views
Comprobar si un objeto de juego es visible en la cámara actual

He estado buscando el desbordamiento de la pila e Internet durante un tiempo tratando de encontrar una solución a este problema, cada vez que trato de usar OnBecameVisible() o OnBecameInvisible() o TestPlanesAABB para verificar si el objeto no es visible a través de la pared, el la cámara todavía puede ver el objeto a través de una pared sólida.

Video del problema aquí: https://youtu.be/3HiEugm6On8

Como pueden ver, si lo miro deja de moverse, si doy la vuelta y se "descarga" o "se vuelve invisible" se acerca, pero si doy la vuelta a una esquina mirando en su dirección, deja de moverse como si puedo verlo y no hay una pared allí, esto es lo que estoy buscando para resolver

es un enemigo que deambula, y quiero que solo se mueva si no puedo verlo, lo cual pensé que sería bastante simple, pero, lamentablemente, parece que no es tan simple como pensaba.

mi código actual es básico:

 public bool IsSeen = false; public void OnBecameVisible() { Debug.Log("I can now see you"); IsSeen = true; } public void OnBecameInvisible() { Debug.Log("I can't see you"); IsSeen = false; }

esto está adjunto al objeto que deseo detectar / no detectar a través de las paredes, lo que creo que verifica si la cámara que elijo puede ver el objeto.

¿alguien tiene alguna idea de cómo puedo arreglar/lograr esto?

over 4 years ago · Santiago Trujillo
1 answers
Answer question

0

Como ya se mencionó, el "problema" general con Renderer.OnBecameVisible es

Tenga en cuenta que el objeto se considera visible cuando debe renderizarse en la escena. Es posible que ninguna cámara lo vea, pero aún debe renderizarse para las sombras, por ejemplo. Además, cuando se ejecuta en el editor, las cámaras de vista de escena también harán que se llame a esta función .

Entonces no es realmente útil para ti.

¿Hay una manera simple de emitir rayos en toda la pantalla?

Desafortunadamente no realmente :/

Puede evitar un poco esto usando GeometryUtility.CalculateFrustumPlanes para obtener los cuatro planos del frustrum de la cámara. Luego puede verificar si el objeto está realmente dentro del frustrum usando GeometryUtility.TestPlanesAABB

 var cam = Camera.main; var planes = GeometryUtility.CalculateFrustumPlanes(cam); var objCollider = GetComponent<Collider>(); if (GeometryUtility.TestPlanesAABB(planes, objCollider.bounds)) { Debug.Log("I am inside the camera frustrum!"); } else { Debug.Log("I am out of sight..."); }

Sin embargo, esto todavía no cubre ningún otro objeto que esté frente al objeto de destino y, por lo tanto, lo cubra realmente.

Necesitaría definir exactamente qué significa visible (por ejemplo, ¿cualquier parte de la malla? ¿El centro del objeto es suficiente para probar? etc.).

Por ejemplo, para probar solo el centro del objeto, podría usar un Physics.Linecast como, por ejemplo

 if (GeometryUtility.TestPlanesAABB(planes, objCollider.bounds)) { Debug.Log("I am inside the camera frustrum!"); if(Physics.LineCast(cam.transform.position, objCollider.GetComponentInChildren<Renderer>().bounds.center, out var hit) { if(hit.gameObject != objCollider.gameObject) { Debug.Log("..but something else is in the way.."); } else { Debug.Log("Now you see me, muhaha!"); } } }

Si desea que sea más preciso y que el seguimiento de cualquier parte de la malla sea visible, entonces en realidad se vuelve complicado. Necesitará proyectar múltiples puntos clave del cuadro delimitador (por ejemplo, cada esquina, centros de los bordes, etc.) según sus necesidades.

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!