Nunca es una mala idea brindarles a sus jugadores una manera fácil de tomar capturas de pantalla desde su juego, sin tener que hacerlo de forma indirecta.
Algunas plataformas tienen una forma de tomar capturas de pantalla de cualquier juego que se ejecute en sus plataformas sin necesidad de usar software externo. Steam, por ejemplo, le permite presionar F12 para tomar una captura de pantalla. Pero, ¿qué sucede si su juego no usa esas plataformas, o si desea tomar capturas de pantalla para hacer algo, como configurar miniaturas para los archivos guardados?
Se puede tomar una captura de pantalla en un juego de Unity simplemente llamando al método CaptureScreenshot de la clase ScreenCapture, es decir, ScreenCapture.CaptureScreenshot(“
Hay varias cosas que debe tener en cuenta. Voy a entrar en más detalles sobre cómo guardar correctamente las capturas de pantalla a continuación, ¡así que asegúrate de seguir leyendo!
Tabla de contenido
Cómo tomar una captura de pantalla en un juego de Unity
Se puede tomar fácilmente una captura de pantalla mediante programación llamando al método ScreenCapture.CaptureScreenshot en cualquier momento. La captura de pantalla generada será la pantalla que ves actualmente en el juego y estará en formato PNG.
Code language: C# (cs)
using System.Collections; using System.Collections.Generic; using UnityEngine; public class ScreenshotManager : MonoBehaviour { public void TakeScreenshot() { ScreenCapture.CaptureScreenshot("TestImage.png"); } }
El código anterior generará una captura de pantalla llamada «TestImage.png» cuando se llame al método TakeScreenshot. La resolución de la captura de pantalla será la resolución actual con la que se tomó la captura de pantalla.
Puede configurar el parámetro superSize del método para aumentar el tamaño de la captura de pantalla resultante:
Code language: C# (cs)
ScreenCapture.CaptureScreenshot("TestImage.png", 3);
El ejemplo anterior hará que la captura de pantalla sea 3 veces más grande que la original. Tenga en cuenta que solo puede tomar un valor entero.
En cuanto a dónde se guarda, si está probando esto en el Editor de Unity, la captura de pantalla se guardará en el directorio raíz de la carpeta del proyecto de su juego.
Para el reproductor independiente, la captura de pantalla se guardará en el directorio «
Esto no es ideal, desea que el reproductor pueda reconocer dónde debería estar la captura de pantalla. En la siguiente sección, te enseñaré cómo guardar capturas de pantalla en un directorio específico.
Cómo guardar una captura de pantalla en un directorio específico en Unity
Como se mencionó anteriormente, cuando solo se pasa el nombre del archivo al método ScreenCapture.CaptureScreenshot, el método predeterminará la ubicación de la captura de pantalla en el directorio raíz. No queremos eso.
Las capturas de pantalla deben guardarse en un directorio hecho para tener exclusivamente capturas de pantalla para que estén más organizadas.
Code language: C# (cs)
using System.Collections; using System.Collections.Generic; using UnityEngine; using System.IO; public class ScreenshotManager : MonoBehaviour { private string directoryName = "Screenshots"; private string fileName = "TestImage.png"; public void TakeScreenshot() { DirectoryInfo screenshotDirectory = Directory.CreateDirectory(directoryName); string fullPath = Path.Combine(screenshotDirectory.FullName, fileName); ScreenCapture.CaptureScreenshot(fullPath); } }
El código anterior intentará crear un directorio llamado «Capturas de pantalla» si aún no existe y luego guardará la captura de pantalla con el nombre «TestImage.png» en ese directorio.
Esto puede parecer un poco confuso, así que déjame desglosarlo por ti.
Code language: C# (cs)
using System.IO;
Esta línea debe incluirse para que cualquier clase y método relacionado con la lectura y escritura de datos esté disponible. Para obtener más información sobre System.IO, consulte la documentación oficial de System.IO Namespace
Code language: C# (cs)
DirectoryInfo screenshotDirectory = Directory.CreateDirectory(directoryName);
El método Directory.CreateDirectory crea un directorio con el nombre especificado en la ruta actual. En este caso, creará un directorio llamado «Capturas de pantalla» en el directorio raíz de su juego, es decir,
La razón por la que tenemos que almacenar el valor devuelto (el objeto DirectoryInfo) es para que podamos obtener la ruta completa al directorio creado para usarla más adelante.
Si el directorio ya existe, simplemente devolverá el valor sin crear un nuevo directorio.
Code language: C# (cs)
string fullPath = Path.Combine(screenshotDirectory.FullName, fileName);
El método Path.Combine une varios nombres de rutas. La propiedad FullName del objeto screenshotDirectory le brinda la ruta absoluta al directorio de capturas de pantalla.
En este caso, combinará la ruta absoluta al directorio con el nombre del archivo, que es:
Code language: HTML, XML (xml)
<path_to_your_game>\Screenshots\TestImage.png
Alternativamente, puede combinar la ruta y el nombre del archivo agregando los 2 valores de cadena juntos usando el operador «+» de esta manera:
Code language: C# (cs)
screenshotDirectory.FullName + "/" + fileName
Esto logrará el mismo resultado, pero recomiendo usar el método Path.Combine ya que es más limpio y menos propenso a errores.
¿Por qué tenemos que crear un directorio primero?
Primero debemos crear el directorio en el que queremos almacenar capturas de pantalla porque, de lo contrario, el método ScreenCapture.CaptureScreenshot fallará ya que no puede guardar el archivo en un directorio que no existe.
Code language: C# (cs)
ScreenCapture.CaptureScreenshot(fullPath);
Por último, llamamos al método ScreenCapture.CaptureScreenshot y le pasamos la ruta completa para guardar la captura de pantalla.
Guardar una captura de pantalla en el directorio de documentos
A veces, es mejor guardar capturas de pantalla en el directorio Documentos, ya que es más fácil de encontrar y navegar.
Puede pensar que obtener la ruta al directorio Documentos es complicado, ya que necesitamos saber el nombre de usuario del usuario actual. Pero no te preocupes, hay una manera de hacerlo.
Code language: C# (cs)
using System.Collections; using System.Collections.Generic; using UnityEngine; using System; using System.IO; public class ScreenshotManager : MonoBehaviour { private string directoryName = "Screenshots"; private string screenshotName = "TestImage.png"; public void SaveScreenshotToDocuments() { string documentsPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); string screenshotPath = Path.Combine(documentsPath, Application.productName, directoryName); DirectoryInfo screenshotDirectory = Directory.CreateDirectory(screenshotPath); ScreenCapture.CaptureScreenshot(Path.Combine(screenshotDirectory.FullName, screenshotName)); } }
Déjame explicarte un poco más en detalle.
Code language: C# (cs)
using System;
Esta línea debe incluirse para que el espacio de nombres del entorno esté disponible para su uso.
Code language: C# (cs)
Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
El método Environment.GetFolderPath se usa junto con el valor de enumeración Environment.SpecialFolder.MyDocuments para obtener el directorio Documentos del usuario actual. Para obtener más información, consulte la documentación oficial de la clase Environment.
Code language: C# (cs)
string screenshotPath = Path.Combine(documentsPath, Application.productName, directoryName);
Luego combinamos la ruta al directorio Documentos con el nombre de nuestro juego y el nombre del directorio de capturas de pantalla.
Code language: C# (cs)
DirectoryInfo screenshotDirectory = Directory.CreateDirectory(screenshotPath); ScreenCapture.CaptureScreenshot(Path.Combine(screenshotDirectory.FullName, screenshotName));
Luego llamamos a Directory.CreateDirectory para crear el directorio de destino y luego procedemos a generar una captura de pantalla en la siguiente línea.
Agregar una marca de tiempo a una captura de pantalla
El método ScreenCapture.CaptureScreenshot sobrescribe el archivo de captura de pantalla si la captura de pantalla recién tomada tiene el mismo nombre que la que ya existe.
Para evitar esto, agreguemos una marca de tiempo a las capturas de pantalla que creamos. Esto se puede hacer fácilmente con la ayuda de la clase DateTime.
Code language: C# (cs)
using System.Collections; using System.Collections.Generic; using UnityEngine; using System; using System.IO; public class ScreenshotManager : MonoBehaviour { private string directoryName = "Screenshots"; private string screenshotName = "TestImage"; public void TakeScreenshot() { string timeNow = DateTime.Now.ToString("dd-MMMM-yyyy HHmmss"); ScreenCapture.CaptureScreenshot("Screenshot " + timeNow + ".png"); } }
Para obtener más información sobre el formato de fecha y hora, visite la documentación oficial.
Conclusión
Guardar capturas de pantalla puede requerir bastante esfuerzo para hacerlo bien. Espero que hayas aprendido algo nuevo hoy. Utilice lo que ha aprendido aquí y ajústelo a sus necesidades. Incluso puede usar estas técnicas para generar capturas de pantalla en el juego para usar para promocionar su juego.
¡Salud!
Atribución
Icono de cámara realizado por Ilham Fitrotul Hayat de www.flaticon.com