Je souhaite créé un logiciel type pixart très simplifié. En gros l'utilisateur dispose d'un damier dont toutes les cases sont de la même couleur au départ et lorsqu'il clic sur une case, celle ci change de couleur. Jusque là tout va bien.
Une fois son travail terminé, l'utilisateur doit pouvoir en créer une image. J'ai donc fouillé sur le net et ai trouvé une solution que je ne maîtrise pas du tout.
J'ai un bouton "Enregistrer" qui doit récupérer ce que voit une caméra secondaire et l'enregistrer dans un dossier.
Voici donc mon script:
Code : Tout sélectionner
#pragma strict
public var cameraRender: Camera;
function Start ()
{
}
function Update ()
{
}
function OnMouseUp()
{
print (Application.persistentDataPath);
var img: Texture2D = new Texture2D(cameraRender.targetTexture.width, cameraRender.targetTexture.height, TextureFormat.RGB24, false);
img.ReadPixels(new Rect(0, 0, cameraRender.targetTexture.width, cameraRender.targetTexture.height), 0, 0);
//img.Apply();
//File.WriteAllBytes(Application.persistentDataPath+"/test.png", bytes);
}
#pragma strict
public var cameraRender: Camera;
function Start ()
{
}
function Update ()
{
}
function OnMouseUp()
{
print (Application.persistentDataPath);
var img: Texture2D = new Texture2D(cameraRender.targetTexture.width, cameraRender.targetTexture.height, TextureFormat.RGB24, false);
img.ReadPixels(new Rect(0, 0, cameraRender.targetTexture.width, cameraRender.targetTexture.height), 0, 0);
//img.Apply();
//File.WriteAllBytes(Application.persistentDataPath+"/test.png", bytes);
}
J'ai directement une erreur à la ligne var img: Texture2D qui m'indique:
NullReferenceException: Object reference not set to an instance of an object
Enregistrer.OnMouseUp () (at Assets/scripts/Enregistrer.js:19)
UnityEngine.SendMouseEvents:DoSendMouseEvents(Int32, Int32)
La variable cameraRender étant bien renseignée depuis l'Inspector, j'imagine que l'erreur vient du "targetTexture.width" mais sans en avoir la certitude, j'essaye de récupérer les dimensions de la caméra afin que l'image créée corresponde bien à ce que voit la caméra, si ce n'est pas ça comment fait on? Je n'ai pas vu de CameraRender.width ou quelque chose de semblable sur la documentation.
Bien que mon erreur m'empêche d'aller plus loin, j'imagine que le peu de code que j'ai ensuite ne suffira pas. En essayant d'appliquer les indications de la page "https://docs.unity3d.com/ScriptReferenc ... ixels.html" (j'ai mis le img.Apply() en commentaire car je ne suis pas certain de son utilité dans mon cas), j'ai constaté un lien en bas de page qui renvoie vers une fonction EncodeToPng, mais lorsque l'on tente de l'atteindre on tombe sur une page blanche.
Y'a t il parmi vous quelqu'un qui maîtrise ce type d'opération et qui pourrait donc m'indiquer les erreurs et éventuellement me proposer une solution?
Autre petite question pendant que j'y suis, j'ai ma caméra principale qui affiche la totalité de la page du logiciel et j'ai créé une caméra secondaire qui affiche uniquement le damier (c'est cette dernière qui doit créer l'image). Mon problème est que son rendu s'affiche sur lon écran, par dessus l'affichage de la caméra principale. Comment puis je faire pour empêcher l'affichage de cette dernière au milieu de l'écran de l'utilisateur?
Merci d'avance pour vos réponses.