Cambie el tamaño de la cámara para que se ajuste a un GameObject en Unity/C#
– UnityAssets3Free
hola , por aqui jorge y en esta ocasion os traigo
nueva pregunta
di que tengo uno GameObject
dentro de una escena 2D y una cámara. Y quiero cambiar el tamaño y la posición de la cámara para que, incluso cuando cambie la resolución de la pantalla, el objeto siga siendo visible. Entonces, ¿cómo puedo hacer esto?
1 respuesta 1
TL; DR: desplácese hacia abajo hasta la parte inferior del código.
Primero, debemos establecer la posición de la cámara en el medio del objeto para que el escalado de la cámara sea más fácil.
Segundo, para escalar la cámara, cambiemos el orthographicSize
cámara en nuestra hoja de ruta (¿Cuál es la Size
atributo en Camera
componente). Pero, ¿cómo calculamos el atributo?
Básicamente, el Size
atributo aquí es half the height of the camera
. Así, por ejemplo, si definimos el Size
por 5
eso significa que la altura de la cámara será de 10 Unity Unit (which is something I made up so you can understand easier)
.
Entonces parece que solo tenemos que tomar la altura del objeto, dividirlo por 2 y establecer el Size
de la cámara al resultado, ¿no? (1)
Bueno en realidad no. Verá, aunque podría funcionar en ciertos casos, cuando el ancho del objeto es mucho, mucho más grande que la pantalla, y la altura es mucho, mucho más pequeña, entonces la cámara no podría ver todo el objeto.
¿Pero por qué? Ahora, digamos que nuestra cámara tiene un ancho/alto de 16/9 y nuestro objeto es 100/18. Esto significa que si escalamos usando la altura, el ancho/alto de nuestra cámara sería 32/18, y si bien es suficiente para cubrir la altura, no es suficiente para cubrir el ancho. Entonces, otro enfoque es calcular usando el ancho
Tomando el ancho del objeto, divídalo por el ancho de la cámara y luego multiplíquelo por la altura de la cámara (luego, por supuesto, divida por 2). Podríamos ajustar todo el ancho del objeto. (Debido a… la proporción o algo así) (dos)
PERO DE NUEVO, tiene el mismo problema que nuestro primer enfoque, pero el objeto es demasiado alto en lugar de demasiado ancho.
Entonces, para resolver esto, solo verifique si el primer enfoque (see (1))
si el objeto se está desbordando y si es así, usaremos el segundo enfoque (see (2))
. Y es eso
Y aquí está el código por cierto:
// replace the `cam` variable with your camera.
float w = <the_width_of_object>;
float h = <the_height_of_object>;
float x = w * 0.5f - 0.5f;
float y = h * 0.5f - 0.5f;
cam.transform.position = new Vector3(x, y, -10f);
cam.orthographicSize = ((w > h * cam.aspect) ? (float)w / (float)cam.pixelWidth * cam.pixelHeight : h) / 2;
// to add padding, just plus the result of the `orthographicSize` calculation with number, like this:
// | |
// V V
// ... cam.pixelHeight : h) / 2 + 1
nota: si aun no se resuelve tu pregunta por favor dejar un comentario y pronto lo podremos de nuevo , muchas gracias
por hoy,hasta la proxima