Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Temas - Gonzalo Marchese

#1
General (Antiguo) / Generar reporte en PDF
Mayo 10, 2017, 06:38:38 PM
Estimados,
 
Primero buenos días! No se si este es el foro indicado para publicar esto, pero aun no me habilitan el resto.
 
Mi problema es el siguiente, estamos desarrollando un juego de disparos, en Unity3d, en el cual se pueden generar reportes en Pdf de los tiros que hemos hecho.
 
Mediante el siguiente código saco las medidas y posición de la Diana de tiro en pantalla:
 

public float[] getPositionObject(GameObject gameObject, Camera camera)
{
   float depth = gameObject.transform.lossyScale.z;
   float width = gameObject.transform.lossyScale.x;
   float height = gameObject.transform.lossyScale.y;
   Vector3 gpSize = gameObject.GetComponent<Renderer> ().bounds.size;
   float[] posiciones = new float[4];
   Vector3 lowerLeftPoint = camera.WorldToScreenPoint( new Vector3( gameObject.transform.position.x - (gpSize.x / 2), gameObject.transform.position.y - (gpSize.y / 2), gameObject.transform.position.z - (gpSize.z / 2)) );
   Vector3 upperRightPoint = camera.WorldToScreenPoint( new Vector3( gameObject.transform.position.x + (gpSize.x / 2), gameObject.transform.position.y + (gpSize.y / 2), gameObject.transform.position.z - (gpSize.z / 2) ) );
   Vector3 upperLeftPoint = camera.WorldToScreenPoint( new Vector3( gameObject.transform.position.x - (gpSize.x / 2), gameObject.transform.position.y + (gpSize.y / 2), gameObject.transform.position.z - (gpSize.z / 2) ) );
   Vector3 lowerRightPoint = camera.WorldToScreenPoint( new Vector3( gameObject.transform.position.x + (gpSize.x / 2), gameObject.transform.position.y - (gpSize.y / 2), gameObject.transform.position.z - (gpSize.z / 2) ) );
   float xPixelDistance = Mathf.Abs( lowerLeftPoint.x - upperRightPoint.x );
   float yPixelDistance = Mathf.Abs ( lowerLeftPoint.y - upperRightPoint.y );
   posiciones [] = xPixelDistance;
   posiciones [1] = yPixelDistance;
   posiciones [2] = lowerLeftPoint.x;
   posiciones [3] = lowerLeftPoint.y;
 
   Debug.Log( "This is the X pixel distance: " + xPixelDistance + " This is the Y pixel distance: " + yPixelDistance );
   Debug.Log("This is the lower left pixel point: " + lowerLeftPoint);
   Debug.Log(" This is the upper left point: " + upperLeftPoint );
   Debug.Log("This is the lower right pixel point: " + lowerRightPoint);
   Debug.Log(" This is the upper right pixel point: " + upperRightPoint);
   return posiciones;
}

 
Luego esta información mas la ubicación del disparo las envió a una DLL para hacer la hacer el PDF con ItextSharp, acá escalo la imagen y dibujo los disparos sobre ella:
 
 
 

int cantDisparos = ;
                for (int z = ; z < player.shoots.Count; z++)
                {
                        g.DrawImage(mrkImg, (
                            diaparo.x - posiciones[2]) * (500 / posiciones[]),
                            (Constants.UNITY_SCREEN - disparo.y - posiciones[3]) * (500 / posiciones[1]));
                }

 
En donde disparo es la posición en en x,y del mismo, posiciones es el array cargado con los datos de la Diana, UNITY_SCREEN es una constante con valor en 1080.
 
player.shoots[z].x - posiciones[2]) * (500 / posiciones[0]):  acá escalo el disparo dentro de una imagen de 500px
 
(Constants.UNITY_SCREEN - player.shoots[z].y - posiciones[3]) * (500 / posiciones[1])): En el eje Y ademas de escalar la imagen a 500px, debo cambiar el (0,0), en unity es abajo a la izquierda y en Win es arriba a la izquierda.
 
 
 
Todo esto funciona perfectamente, salvo por un desfasaje  en los puntos. Están desplazados sobre el eje y un poco hacia abajo. Entiendo que el problema puede venir desde Unity cuando calculo la ubicacion del Objeto, ya que el mismo esta en 3D, nose como juega el eje Z en este caso. 
 
Les adjunto una imagen de como salen ahora los disparos y donde deberían salir. (los círculos rojos son donde debería estar el disparo)
 

 
Espero se entienda y puedan ayudarme. 
 
Desde ya muchas gracias!!!
#2
General (Antiguo) / Hola
Mayo 10, 2017, 05:16:17 PM
Hola a todos, mi nombre es Gonzalo, soy de Buenos Aires, Argentina. Estoy comenzando con desarrollos en Unity. Espero que me puedan ayudar con algunas cuestiones que voy teniendo.
 
Muchas gracias!!!