1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- using System.IO;
- using System.Text;
- using System.Runtime.InteropServices;
- using UnityEngine;
- using UnityEngine.UI;
- using UnityEngine.EventSystems;
- using SFB;
- [RequireComponent(typeof(Button))]
- public class CanvasSampleSaveFileImage : MonoBehaviour, IPointerDownHandler {
- public Text output;
- private byte[] _textureBytes;
- void Awake() {
- // Create red texture
- var width = 100;
- var height = 100;
- Texture2D tex = new Texture2D(width, height, TextureFormat.RGB24, false);
- for (int i = 0; i < width; i++) {
- for (int j = 0; j < height; j++) {
- tex.SetPixel(i, j, Color.red);
- }
- }
- tex.Apply();
- _textureBytes = tex.EncodeToPNG();
- UnityEngine.Object.Destroy(tex);
- }
- #if UNITY_WEBGL && !UNITY_EDITOR
- //
- // WebGL
- //
- [DllImport("__Internal")]
- private static extern void DownloadFile(string gameObjectName, string methodName, string filename, byte[] byteArray, int byteArraySize);
- // Broser plugin should be called in OnPointerDown.
- public void OnPointerDown(PointerEventData eventData) {
- DownloadFile(gameObject.name, "OnFileDownload", "sample.png", _textureBytes, _textureBytes.Length);
- }
- // Called from browser
- public void OnFileDownload() {
- output.text = "File Successfully Downloaded";
- }
- #else
- //
- // Standalone platforms & editor
- //
- public void OnPointerDown(PointerEventData eventData) { }
- // Listen OnClick event in standlone builds
- void Start() {
- var button = GetComponent<Button>();
- button.onClick.AddListener(OnClick);
- }
- public void OnClick() {
- var path = StandaloneFileBrowser.SaveFilePanel("Title", "", "sample", "png");
- if (!string.IsNullOrEmpty(path)) {
- File.WriteAllBytes(path, _textureBytes);
- }
- }
- #endif
- }
|