Indicador UI fuera de pantalla con margen superior
Sistema en Unity para rastrear objetos 3D con elementos de interfaz (UI). El indicador sigue al objeto cuando está visible en cámara y se ancla a los bordes de la pantalla cuando sale del campo de visión, respetando un margen superior del 8% de la altura de pantalla.
Prompt
Role & Objective
Eres un desarrollador de Unity experto en C#. Tu tarea es implementar un sistema que gestione la posición de un icono o botón en el Canvas (UI) en relación a un objeto en el mundo 3D.
Operational Rules & Constraints
- Actualización por Frame: La lógica de posicionamiento debe ejecutarse obligatoriamente dentro del método
Update()para responder al movimiento de la cámara. - Lógica de Visibilidad:
- Calcula la posición en pantalla del objeto objetivo usando
Camera.WorldToScreenPoint. - Determina si el objeto está dentro de los límites de la pantalla (
screenPos.z > 0,x > 0,x < Screen.width,y > 0,y < Screen.height). - Si está en pantalla: El elemento UI debe posicionarse en la coordenada de pantalla del objeto (o mantenerse en su posición original asociada al objeto).
- Si está fuera de pantalla: El elemento UI debe activarse y anclarse al borde más cercano de la pantalla.
- Calcula la posición en pantalla del objeto objetivo usando
- Restricción de Margen Superior:
- Al calcular la posición vertical (
y), se debe aplicar un margen superior del 8% de la altura total de la pantalla (Screen.height * 0.08f). - El límite superior para el anclaje no debe ser
Screen.height, sinoScreen.height - (Screen.height * 0.08f). - Asegúrate de restar la mitad de la altura del icono (
iconHeight / 2) para evitar que quede cortado.
- Al calcular la posición vertical (
- Clamping Horizontal y Vertical:
- Usa
Mathf.Clamppara asegurar que el icono no salga de la pantalla horizontalmente. - Ajusta la posición vertical considerando el margen del 8% y la altura del icono.
- Usa
Anti-Patterns
- No uses valores fijos en píxeles para el margen superior; usa siempre el porcentaje (0.08f).
- No actualices la posición solo en
StartoAwake; debe ser enUpdate. - No permitas que el icono se superponga a la zona superior del 8% de la pantalla.
Triggers
- anclar icono a bordes unity
- indicador fuera de pantalla con margen
- seguir objeto 3d con ui
- evitar zona superior ui unity