CaptureScreenshot - Editor Ok, Exe Fail

Pour les scripts écrits en C#
Règles du forum
Merci de respecter la NOMENCLATURE suivante pour vos TITRES de messages :

Commencez par le niveau de vos scripts
DB = Débutant
MY = Moyen
CF = Confirmé

Puis le domaine d'application
-RS = Réseau
-AL = Algorithmie

Exemple :

[DB-RS] Mouvement perso multijoueur
Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6225
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

CaptureScreenshot - Editor Ok, Exe Fail

Message par boubouk50 » 18 Nov 2015 14:40

Salutations, gens de tous horizons,

Je cherche à faire marcher la fonction CaptureScreenshot(string filename, int superSize = 0); pour mon exécutable.
Voilà mon code, récupéré ICI:

Code : Tout sélectionner

using UnityEngine;
using System.Collections;
using System;

public class ScreenshotMovie : MonoBehaviour
{
	// The folder we place all screenshots inside.
	// If the folder exists we will append numbers to create an empty folder.
	public string folder = "ScreenshotMovieOutput";
	public int frameRate = 30;
	public int videoSizeMultiplier = 1;
	public int imageSizeMultiplier = 1;

	private int imageCounter = 0;
	private bool videoCapture = false;
	private string realFolder = "";
	private bool firstCapture = true;

	void Start ()
	{
		Time.captureFramerate = frameRate;
	}

	void InitFolder () {
		// Find a folder that doesn't exist yet by appending numbers!
		realFolder = folder;
		if (!System.IO.Directory.Exists(realFolder))
			System.IO.Directory.CreateDirectory(realFolder);
		folder += DateTime.Now.Date.ToString("/yyyy-MM-dd");
		int count = 1;
		while (System.IO.Directory.Exists(realFolder))
		{
			realFolder = folder + "-session" + count;
			count++;
		}
		// Create the folder
		System.IO.Directory.CreateDirectory(realFolder);
	}
	
	void Update ()
	{
		if (Input.GetKeyDown (KeyCode.H)) {
			CaptureImage (true);
		}
	}

	void CaptureImage (bool _isImage) {
		if (firstCapture) {
			InitFolder ();
			firstCapture = false;
		}

		int sizeMultiplier = imageSizeMultiplier;
		string name = string.Format("{0}/image_{1:D4}.png", realFolder, imageCounter++);
		
		// Capture the screenshot
		if (Uri.IsWellFormedUriString (name, UriKind.RelativeOrAbsolute))
			Application.CaptureScreenshot(name, sizeMultiplier);
		else
			Application.CaptureScreenshot("toto.png", sizeMultiplier);
	}
}
Il fonctionne très bien sous l'Editor, par contre en ce qui concerne l'exécutable, je ne récupère pas l'image.
Les dossiers ScreenshotMovieOutput et 2015-11-18-sessionX sont bien créés, les paths sont bons, mais l'image n'est pas créée. Si je ne choisis pas de chemin: Application.CaptureScreenshot("toto.png", sizeMultiplier);, l'image est créée à la racine, sinon rien.

Un petit coup de main, svp?
Merci beaucoup!
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6225
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: CaptureScreenshot - Editor Ok, Exe Fail

Message par boubouk50 » 18 Nov 2015 14:57

Si je place le dossier dans Application.dataPath, alors c'est bon, je suppose alors que c'est une histoire de path relatif ou absolu. Je vérifie.
-EDIT- Ok, ça à l'air d'être ça...
Désolé, je me sers de vous comme d'un canard en plastique, mais ça marche. Je bloque depuis une bonne heure, il me suffit d'écrire un post pour trouver l'erreur...
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

Avatar de l’utilisateur
boubouk50
ModoGenereux
ModoGenereux
Messages : 6225
Inscription : 28 Avr 2014 11:57
Localisation : Saint-Didier-en-Bresse (71)

Re: CaptureScreenshot - Editor Ok, Exe Fail

Message par boubouk50 » 18 Nov 2015 15:12

Correction du code pour avoir un dossier au niveau de l'exécutable:

Code : Tout sélectionner

void Start ()
{
	Time.captureFramerate = frameRate;
	string input = Application.dataPath;
	int index = input.LastIndexOf("/");
	if (index > 0)
		folder = input.Substring(0, index + 1) + folder; //Dossier au niveau de l'exécutable
}
"Ce n'est pas en améliorant la bougie, que l'on a inventé l'ampoule, c'est en marchant longtemps."
Nétiquette du forum
Savoir faire une recherche
Apprendre la programmation

Répondre

Revenir vers « (C#) CSharp »