miércoles, 26 de diciembre de 2012

Unity 3D + Subversion

Aunque Unity 3D tiene un servidor de versiones integrado puede resultar útil en ocasiones integrar un proyecto Unity con un servidor de versiones externo como Subversion.

Para ello hay que seguir los siguientes pasos:

  1. Crear un proyecto de Unity. Por ejemplo MyUnityProject.
  2. Habilitar los metaficheros dentro de Unity: Edit->Project Settings->Editor
  3. Cierra Unity (así verificas que se guardan todos los ficheros).
  4. Borrar el directorio Library.
  5. Comitear el proyecto entero. Desde línea de comandos:
    svn import -m"Initial project import" InitialUnityProject svn://my.svn.server.com/MyUnityProject
  6. Check out del proyecto:
    svn co svn://my.svn.server.com/MyUnityProject
    Chequea que los directorios Assets y ProjectSettings están versionados.
  7. Abre el proyecto subido al repositorio. Una vez abierto el proyecto se recrearán todos los metadatos en el directorio Library borrado en el paso 4.
  8. Opcional: Configura un filtro para ignorar el directorio Library y no versionarlo:
    svn propedit svn:ignore MyUnityProject/
    Subversion abrirá un fichero de texto. Añade el directorio Library.
  9. Finalmente comitea los cambios. Tu proyecto está subido y sincronizado!
    svn ci -m"Finishing project import" MyUnityProject


Fuente: http://docs.unity3d.com/Documentation/Manual/ExternalVersionControlSystemSupport.html

lunes, 12 de noviembre de 2012

Cambiar icono en una ventana mediante el API Windows

A veces es interesante personalizar tu aplicación y más si es un videojuego. Una manera de lograr esto es cambiar el icono de la ventana de tu aplicación.

Bien, pues algo "sencillito" como cambiar el icono de una ventana en Windows utilizando su API se puede convertir en algo infernal si una guía de como hacerlo.

Después de googlear bastante he llegado a la conclusión de que la mejor forma es mandar un mensaje a la ventana pidiendole un cambio de icono (WM_SETICON):

mInstance = GetModuleHandle(NULL);

HANDLE icon_small = LoadImage(mInstance, "C:\\crosshair.ico", IMAGE_ICON, 16, 16, LR_LOADFROMFILE);

HANDLE icon_big = LoadImage(mInstance, "C:\\crosshair32.ico", IMAGE_ICON, 32, 32, LR_LOADFROMFILE);

Los dos tamaños son para el icono que aparece arriba a la izquierda de la ventana y el grande es para la barra de tareas.

Una vez hecho esto y después de crear la ventana:

    // Create The Window
    mWnd = CreateWindowEx( lExStyle,
       lProperties.macApplicationName.c_str(),  // Class Name            
       lProperties.macApplicationName.c_str(),  // Window Title
       lStyle |                                                      // Defined Window Style
       WS_CLIPSIBLINGS |                            // Required Window Style
       WS_CLIPCHILDREN,                           // Required Window Style
       0, 0,                                                         // Window Position
       lWindowRect.right-lWindowRect.left,       // Calculate Window Width
       lWindowRect.bottom-lWindowRect.top,   // Calculate Window Height
       NULL,                                                     // No Parent Window
       NULL,                                                     // No Menu
       mInstance,                                                // Instance
       NULL);


Tenemos que enviar el mensaje de cambio de icono:

  SendMessage(mWnd, (UINT)WM_SETICON, ICON_SMALL, (LPARAM)icon_small);
  SendMessage(mWnd, (UINT)WM_SETICON, ICON_BIG, (LPARAM)icon_big);


Con esto ya tendríamos personalizado el icono ;-)


 

domingo, 2 de septiembre de 2012

Resolución de errores, tip #2

Usando VC++ 2008 y DirectX.

Error:

  • error LNK1181: no se puede abrir el archivo de entrada 'dxguid.lib'
Tu proyecto está utilizando DirectX SDK y o no lo tienes instalado en tu equipo o tienes que incluir en los directorios de VC++.

Solución:
Instala DirectX SDK por ejemplo DirectX DSK Febrero 2010 (que todavía incluia Direct Input).

Ve a:

Herramientas->Opciones->Proyectos y soluciones->Directorios de VC++



y añade el directorio correspondiente para las librerias de DirectX, en mi caso $(DXSDK_DIR)/Lib/x86